char и unsigned char
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.90] |
|
|
Правила раздела Visual C++ / MFC / WTL (далее Раздела)
FAQ Раздела
Обновления для FAQ Раздела
Поиск по Разделу
MSDN Library Online| Страницы: (3) [1] 2 3 все ( Перейти к последнему сообщению ) |
char и unsigned char
|
Сообщ.
#1
,
|
|
|
|
Не могу найти простую вещь
![]() чем отличаются char и unsigned char и как можно сделать преобразование? |
|
Сообщ.
#2
,
|
|
|
|
char - значение от -128 до 128, а unsigned char - от 0 до 256. Преобразуется по-моему обычным преобразованием типов.
![]() ![]() <br>char c;<br>unsigned char uc;<br>.<br>.<br>.<br>uc = (unsigned char) c; |
|
Сообщ.
#3
,
|
|
|
|
спасибо тебе, добрый друг.
|
|
Сообщ.
#4
,
|
|
|
|
краткое дополнение...
"unsigned" в переводе с английского "беззнаковое"... Это так, на всякий случай... |
|
Сообщ.
#5
,
|
|
|
|
Цитата Pourtous, 03.08.03, 01:24:33 char - значение от -128 до 128, а unsigned char - от 0 до 256. Преобразуется по-моему обычным преобразованием типов. ![]() ![]() <br>char c;<br>unsigned char uc;<br>.<br>.<br>.<br>uc = (unsigned char) c; Надо еще добавить, что коррекно работает при c >= 0. |
|
Сообщ.
#6
,
|
|
|
|
Цитата e-yes, 03.08.03, 04:07:41 Надо еще добавить, что коррекно работает при c >= 0. ты не прав... смотри: ![]() ![]() char c = -125;<br>unsigned char u = (unsigned)c; что у нас ща в u? Правильно, 131 ![]() т.е. если c < 0, то ![]() ![]() u = 256 + c; ;D |
|
Сообщ.
#7
,
|
|
|
|
Проектировать надо нормально, тогда и компилироваться все будет без ворнингов и явного преобразования типов.
Сантех, ты хоть и модератор, но пофлеймить любишь... мама не горюй ;D |
|
Сообщ.
#8
,
|
|
|
|
2Pourtous:
1) Один байт может хранить значения от -128 до 127 (а не до 128). 2) Является ли char знаковым или беззнаковым, зависит от реализации. 3) Никакого явного преобразования не надо. Собственно происто char отличается от unsigned char и signed char тем, что два последних являеются гарантированно беззнаковым и знаковым типом соответственно. А насчет первого этого неизвестно. |
|
Сообщ.
#9
,
|
|
|
|
Цитата Relan, 03.08.03, 21:59:16 3) Никакого явного преобразования не надо. Без явного преобразования будет ворнинг при компиляции. |
|
Сообщ.
#10
,
|
|
|
|
typedef спасет отцов русской демократии, ну и его экстремумы через define можно наопределять...
|
|
Сообщ.
#11
,
|
|
|
|
Цитата e-yes, 04.08.03, 07:00:25 Без явного преобразования будет ворнинг при компиляции. Ни gcc, ни мелкомягкий ворнинга не выдали. |
|
Сообщ.
#12
,
|
|
|
|
должен быть ворнинг, мол перевод ансигнет ту сигнет...
ЗЫ Тема, имхо, уже исчерпано, а флэйм тока развиваеЦа... имхо, тему мона закрыть! |
|
Сообщ.
#13
,
|
|
|
|
Цитата SUnteXx, 04.08.03, 18:39:04 Не уверен... Кто-то утверждал, не помню кто, что стандарт не определяет атомарный тип ни как signed ни как unsigned, иначе получается явный избыток в терминологии (тип, signed тип и unsigned тип)...ЗЫ Тема, имхо, уже исчерпано, а флэйм тока развиваеЦа... имхо, тему мона закрыть! |
|
Сообщ.
#14
,
|
|
|
|
Цитата SVK , 04.08.03, 18:51:57 Не уверен... Кто-то утверждал, не помню кто, что стандарт не определяет атомарный тип ни как signed ни как unsigned, иначе получается явный избыток в терминологии (тип, signed тип и unsigned тип)... Стандарт утверждает буквально следующее (п. 3.9.1): Существует три разных типа - char, signed char и unsigned char. Они имеют один и тот-же размер, подчиняются одним и тем-же правилам выравнивания и представляют по сути один и тот же объект. Для беззнакового типа все биты используются для представления числа, для знакового - один бит выделяется для знака. Тип char может быть либо знаковым, либо беззнаковым и это implementation-defined для конкретного компилятора. При этом он не является синонимом ни одного, ни другого. |
|
Сообщ.
#15
,
|
|
|
|
char - используется для строковых переменных (нуль-терминированных), размер буфера определяется, например, strlen-ом.
unsigned char - для бинарных данных, необходимо всегда знать размер данных в буфере. привести тип char к типу uchar можно безопасно. Обратное приведение "чревато боком" .для приведения бинарных данных к читабельному виду используют, обычно, хексодецимальное преобразование , когда каждый uchar байт представлен двумя char байтами. (например, чтобы напечатать цифровую подпись...) |