[an error occurred while processing this directive]
Тем не менее, свиг вправо определен очень четко.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Oldring 14 ноября 2002 г. 15:18
В ответ на: так стандарт тогда и порядок должен определять -))) иначе сдвиг направо ничего не будет означать отправлено net 14 ноября 2002 г. 14:57

Стандарт требует, чтобы представление целых было двоичным и еще термины, которые я не помню в деталях. В двух словах, из всего этого следует, что сдвиг unsigned int вправо на N бит, где N меньше разрядности представления целого, эквивалентен делению числа на 2^N. Это будет верно для любой реализации С, совместимой со стандартом. Сдвиг вправо отрицательных signed int уже nonportable, так как стандарт оставляет на усмотрение реализации, сдвиг будет арифметическим или логическим. Соответственно, естественным образом и определяется порядок бит в целом - N-й бит равен (1<Трюк с union же использует не порядок бит в целом, а порядок размещения целого по последовательным адресам в памяти.

Порядок же размещение же int и unsigned int в памяти стандартом не определяется. Реализация размещает его в памяти так, как удобно процессору. Есть big-endian и little-endian 16- и 32-битные процессоры, соответсвенно, есть и различные реализации. Некоторые процессора (например, ARM) можно установкой флага в управляющем регистре переключить в соответствующий режим - будут по-разному работать команды записи/чтения целых в памяти. Забавно, но были и смешанные реализации - что-то вроде порядка 2301. Что касается 8-битников - то для них часто нет выделенного предпочтительного порядка размещения байт целого в памяти.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru