[an error occurred while processing this directive]
Глюк компилятора или мой? Объясните мне глупому...(Hi-Tech C)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
|
Отправлено
Юрец 05 июля 2002 г. 02:24
|
|
|
|
нарвался на такие грабли:
---------------------------------------------
unsigned char a;
unsigned char b;
a = 0;
b = 0xFF;
if(a == ~b)
{
<что-нибудь>
}
--------------------------------------------
Так вот,это <что-нибудь> никогда не выполняется!
Решил посмотреть ассемблерный листинг - оказалось компилятор переводит эти числа в 16-битные,получается 0x0000 != 0xFF00.
Ладно,думаю,может я чего-то недопонимаю - смотрю MSDN по поводу оператора "~", там написано: "the result has the type of the operand after conversion",но операнд же у нас char,а не int и не short.
Потом попробовал в MS Visual C++ - тоже самое...
Так что же это? Глюки в двух компиляторах? =/
Составить ответ
|||
Конференция
|||
Архив
Ответы
- Ответ: Можно задать явноеуказание на тип, при этом и выражение — Bill (05.07.2002 21:51, 120 байт)
- преобразование в ИНТ осуществляется не всегда (+) — kV (05.07.2002 20:12, 210 байт)
- Есть еще подводные камни(+) — L.A. (05.07.2002 14:08, 142 байт)
- Всем спасибо! Теперь буду всегда растолковывать ему что к чему :) — Юрец (05.07.2002 13:26, пустое)
- Ответ: Ваш - в стандартном С перед выполнением любых арифметических операций char преобразовывается в int — Oldring (05.07.2002 11:25, пустое)
- Ответ: — Vallav (05.07.2002 10:26, 266 байт)
- На компилятор надейся... — DP (05.07.2002 06:31, 865 байт)
- Ответ: — Vallav (05.07.2002 09:56, 247 байт)
- Вот так... — DP (05.07.2002 10:24, 754 байт)
- Ответ: — Vallav (05.07.2002 11:23, 287 байт)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru