Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> char vs unsigned char 
:(
    Опции темы
Hagrael
Дата 17.8.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



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

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

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

Премного благодарен.
PM MAIL   Вверх
Чoо
Дата 17.8.2011, 18:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



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

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


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
rodnover
Дата 17.8.2011, 18:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 2
Всего: 10



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

Это сообщение отредактировал(а) rodnover - 17.8.2011, 18:49
PM MAIL   Вверх
Hagrael
Дата 17.8.2011, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Но почему выводится 8, а не 10?
PM MAIL   Вверх
Чoо
Дата 17.8.2011, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



oct 10 = dec 8

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

Это сообщение отредактировал(а) Чoо - 17.8.2011, 19:37


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
voral
Дата 17.8.2011, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.3.2008
Где: Иваново

Репутация: нет
Всего: нет



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


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

Это сообщение отредактировал(а) voral - 17.8.2011, 19:33
PM MAIL WWW   Вверх
Чoо
Дата 17.8.2011, 19:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



чуть поправил там опечатку.. было dec10=oct8 smile 


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
rodnover
Дата 17.8.2011, 19:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 2
Всего: 10



Если надо присвоить 10 сделай так:
Код

unsigned char a = 10;


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


Код

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



Это сообщение отредактировал(а) rodnover - 17.8.2011, 19:42
PM MAIL   Вверх
Hagrael
Дата 18.8.2011, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



smile Я сейчас запустил калькулятор, ввел там 10 в десятичной системе, потом сменил эту систему на восьмеричную и получил 12!
PM MAIL   Вверх
Hagrael
Дата 18.8.2011, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



А-а, тут программист указывает 8-ричное число изначально smile Теперь понятно. А вообще какой бит выделяется для показания знака? Вот, к примеру, у меня число -10.
?001010?
Левый или правый бит выделится под минус?
PM MAIL   Вверх
Чoо
Дата 18.8.2011, 08:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



выделяется "левый"

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


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
mes
Дата 18.8.2011, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



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

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


--------------------
PM MAIL WWW   Вверх
Hagrael
Дата 18.8.2011, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Википедия, да еще и на английском о_О Не осилю. Если вам нетрудно, mes, скажите, что вы имели в виду под словами "никакой".
PM MAIL   Вверх
xvr
Дата 18.8.2011, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



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

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


PM MAIL   Вверх
Чoо
Дата 18.8.2011, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



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

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

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

Это сообщение отредактировал(а) Чoо - 18.8.2011, 12:03


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0778 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.