Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > char vs unsigned char


Автор: Hagrael 17.8.2011, 18:18
Здравствуйте, программисты. Когда я использую char, то отводится ли у меня один бит под знак? И как объяснить такое? smile 
Код

unsigned char a = '\10';
std::cout << (int) a;

На консоль выводится 8!

Премного благодарен.

Автор: Чoо 17.8.2011, 18:41
unsigned - число без знака. Занимает 1 байт, соотв диапозон значений 0,,FF
signed - число со знаком, соотв диапозон значений -7F..7F - следовательно отводится, но char по прежнему занимает 1 байт.
Второй вопрос: вы сделали явное приведение типов, вот и выводится 8

Добавлено через 2 минуты и 21 секунду
<< - на самом деле, операция помещения в поток. Она определена так, что если в поток помещать значение типа char, будет отображен символ, если тип int - то будет выведено число, что вы и наблюдаете

Автор: rodnover 17.8.2011, 18:49
число 8, что в unsigned char, что в char представляется одинаковой последовательностью битов (00001000)

Автор: Hagrael 17.8.2011, 19:12
Но почему выводится 8, а не 10?

Автор: Чoо 17.8.2011, 19:27
oct 10 = dec 8

Добавлено @ 19:28
char c = \10 - значение в восьмеричной системе счисления 
char c=\x10 - в шестнадцатеричной

Автор: voral 17.8.2011, 19:32
а если '/11' будет 9
а если '/07' будет 7
а если '/08' будет ругаться компилер
Ибо сие есть восьмиричная система


Ну вот опередили...... smile

Автор: Чoо 17.8.2011, 19:39
чуть поправил там опечатку.. было dec10=oct8 smile 

Автор: rodnover 17.8.2011, 19:41
Если надо присвоить 10 сделай так:
Код

unsigned char a = 10;


Для справки можно сделать так:


Код

unsigned char a = -1;
std::cout << (int) a; // Выведет 255


Автор: Hagrael 18.8.2011, 08:02
smile Я сейчас запустил калькулятор, ввел там 10 в десятичной системе, потом сменил эту систему на восьмеричную и получил 12!

Автор: Hagrael 18.8.2011, 08:20
А-а, тут программист указывает 8-ричное число изначально smile Теперь понятно. А вообще какой бит выделяется для показания знака? Вот, к примеру, у меня число -10.
?001010?
Левый или правый бит выделится под минус?

Автор: Чoо 18.8.2011, 08:54
выделяется "левый"

Добавлено через 22 секунды
думаю правильней - старший бит

Автор: mes 18.8.2011, 09:17
Цитата(Чoо @  18.8.2011,  07:54 Найти цитируемый пост)
думаю правильней - старший бит 

грубо говоря, никакой.. smile 
http://en.wikipedia.org/wiki/Method_of_complements

Автор: Hagrael 18.8.2011, 09:58
Википедия, да еще и на английском о_О Не осилю. Если вам нетрудно, mes, скажите, что вы имели в виду под словами "никакой".

Автор: xvr 18.8.2011, 11:54
Цитата(Hagrael @  18.8.2011,  09:58 Найти цитируемый пост)
кажите, что вы имели в виду под словами "никакой". 

10  = 00001010
-10 = 11110110 (побитовая инверсия + 1)


Автор: Чoо 18.8.2011, 12:02
Цитата(xvr @ 18.8.2011,  11:54)
Цитата(Hagrael @  18.8.2011,  09:58 Найти цитируемый пост)
кажите, что вы имели в виду под словами "никакой". 

10  = 00001010
-10 = 11110110 (побитовая инверсия + 1)

так в этом случае какое перед нами число мы судим по самому старшему биту.. так-то 11110110 может быть равно и 246

Автор: xvr 18.8.2011, 12:17
Цитата(Чoо @  18.8.2011,  12:02 Найти цитируемый пост)
ак-то 11110110 может быть равно и 246

Может, если оно беззнаковое. 

Автор: Hagrael 18.8.2011, 12:25
Чoо, как я понимаю, если n <= 1111, то n рассматривается как положительное число, равное n, а если же n > 1111 (n = 10001111 || n = 1011111 etc), то оно рассматривается как отрицательное число, равное -(n-1111) или же 1111-n. Чисто догадка smile

Автор: Чoо 18.8.2011, 12:30
что-то я не понял догадку

Автор: mes 18.8.2011, 12:34
Цитата(Hagrael @  18.8.2011,  08:58 Найти цитируемый пост)
 да еще и на английском 

а нажать на русский неужто так затруднительно ?!  smile 

Автор: borisbn 18.8.2011, 13:14
Цитата(Hagrael @  18.8.2011,  09:58 Найти цитируемый пост)
Википедия, да еще и на английском о_О Не осилю

основсой язык программиста (не ЯП, а просто "язык") - английский. Иначе получится это
user posted image

Автор: boostcoder 18.8.2011, 13:18
о чем речь? smile 

Автор: azesmcar 18.8.2011, 13:20
Напомнило:
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимают smile 

Автор: boostcoder 18.8.2011, 13:25
Цитата(azesmcar @  18.8.2011,  13:20 Найти цитируемый пост)
и те, которые ее не понимают

 smile 

вот скажите, "type requirements" и "концепт", это одно и то же? т.е. в диалоге использовать слово "концепт" будет правильно? а то "type requirements" слишком длинное словосочетание)

Добавлено через 3 минуты и 10 секунд
Цитата(azesmcar @  18.8.2011,  13:20 Найти цитируемый пост)
10 типов людей

а почему 10? в чем подвох?

Автор: azesmcar 18.8.2011, 13:29
Цитата(boostcoder @  18.8.2011,  13:25 Найти цитируемый пост)
а почему 10? в чем подвох? 

ты из второй категории smile 

Автор: boostcoder 18.8.2011, 13:32
знаю-знаю smile 

Автор: mes 18.8.2011, 14:37
Цитата(boostcoder @  18.8.2011,  12:25 Найти цитируемый пост)
а почему 10? в чем подвох? 

boostcoder, а чему равна двоичная 10 ?

Автор: boostcoder 18.8.2011, 14:40
Цитата(mes @  18.8.2011,  14:37 Найти цитируемый пост)
а чему равна двоичная 10 ?

2?

а на вопрос:
Цитата(boostcoder @  18.8.2011,  13:25 Найти цитируемый пост)
"type requirements" и "концепт", это одно и то же? т.е. в диалоге использовать слово "концепт" будет правильно?


Автор: Hagrael 18.8.2011, 18:13
borisbn, я знаю английский на нормальном уровне и смогу перевести обычный текст, но wiki я и с русского на русский перевести не смогу smile

Цитата(azesmcar @  18.8.2011,  13:20 Найти цитируемый пост)
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимают

smile smile smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)