Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
У GCC есть одна фича нехорошая (+)
Отправлено
Сидоргек
04 сентября 2008 г. 17:08
В ответ на:
У меня GCC для NIOS. Может я не умею правильно готовить? ;-)
отправлено misyachniy 04 сентября 2008 г. 16:57
char x[2];
int y = x[0] + (x[1] << 8);
может и не сработать. Что бы точно получилось нужно
int y = (int)x[0] + (((int)x[1]) << 8);
Составить ответ
|
Вернуться на конференцию
Ответы
Дык сначала производятся операции с переменными типа char и только потом присвоение переменной типа int. А сдвиг char влево на 8 бит это то же самое, что просто обнулить его.
-
rezident
(04.09.2008 18:46:49
88.81.213.38
,
пустое
)
Курим стандарт. Вот первый попавшийся вариант:
-
vmp
(04.09.2008 19:55:8
10.0.1.100,87.245.155.194
, 1073 байт,
ссылка
,
картинка
)
А! Вот в чем подвох, константа имеет тип int! Теперь понял. Но если бы там была не константа, а char, имеющая значение 8, то перед присвоением int значение выражения образалось бы до char?
-
rezident
(04.09.2008 20:01:23
88.81.213.38
,
пустое
)
В С нет арифметики ни с целыми типами меньше int, ни с плавающими меньше double.
-
Oldring
(04.09.2008 21:14:56
91.76.18.158
, 249 байт)
Проверил в IAR EW430. Не урезает.
-
rezident
(04.09.2008 20:15:41
88.81.213.38
, 123 байт)
Так она по стандарту и не должна сработать !
-
miv
(04.09.2008 17:26:1
213.170.82.250
, 69 байт)
По стандарту должна сработать, char всегда приводится к int. А не срабатывает она в Keil C51, когда выключен флажок Enable ANSI integer promotion rules.
-
vmp
(04.09.2008 18:45:57
10.0.1.100,87.245.155.194
,
пустое
)
А разве перед присовением не усекается до char?
-
rezident
(04.09.2008 18:59:23
88.81.213.38
,
пустое
)
С какой стати? Результат int присваивается в int.
-
Oldring
(04.09.2008 19:11:3
91.76.18.158
,
пустое
)
Результат char это он присваивается переменной int.
-
rezident
(04.09.2008 19:51:40
88.81.213.38
,
пустое
)
По стандарту все аргументы расширяются до int. В нестандартных реализациях может быть что угодно.
-
Oldring
(04.09.2008 21:03:30
91.76.18.158
,
пустое
)
+1 интересно было бы увидеть код с асмовым листингом где оно срабатывает =)
-
Alex B
(04.09.2008 18:12:49
10.1.20.138,87.248.227.162
,
пустое
)
Причём, гадина, вылазит не всегда.
-
Сидоргек
(04.09.2008 17:09:37
89.209.87.196
,
пустое
)
Вылазит, видимо тогда когда выравнивание попадает или не попадает в слово.
-
GDI
(04.09.2008 18:20:21
195.131.97.15
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 85:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru