2011-02-20 2 views
1

Я не тестировал на процессоре большого конца, но всегда ли это дает мне младший байт?Получение младшего значащего байта

int i = 12345678; 
unsigned char c = static_cast<unsigned char>(i); 
+1

(мета) Если вы используете static_cast не следует отметить вопрос, как C. Я не буду повторно задать его, потому что я думаю, что лучше вы это делаете (так что вы узнаете тег -etiquette :-)) – xanatos

ответ

5

Да, это всегда даст вам младший байт. Спецификация C++ (§ 4.7/2) гарантирует, что сужение конверсий всегда отбрасывает наиболее значимые байты, возвращая наименьшее значение, сравнимое с исходным целым, по модулю 2 n, где n - количество бит в целевом типе.

Это не означает, что unsigned char - это один байт. Все, что гарантировано, это то, что sizeof(char) == 1. Однако, если вы рассматриваете байт как самый маленький блок памяти, способный удерживать символ, тогда это должно работать нормально.

+0

@templatetypedef: 'unsigned char' также является одним байтом. См. $ 5.3.3/1 – Nawaz

+0

@Nawaz, но стандарт не гарантирует его. – user32344

+0

@ user32344: Я также разместил ссылку! – Nawaz

0

Не работает ли следующее:

int i = 12345678; 
unsigned char c = (i % 256); 

или

int i = 12345678; 
unsigned char c = (i & 255); 
Смежные вопросы