【发布时间】:2011-10-08 19:35:00
【问题描述】:
我已经环顾四周,找不到类似的问题,如果之前有人问过,我深表歉意。
我只是在玩类型和数字,我想知道是否可以保证以下行为。 如果我将 2 个变量声明为
unsigned char BIT_8 = 0;
unsigned short int BIT_16 = 0xFF01;
然后执行以下操作(暂时忽略 C 样式转换,除非这会影响它?)
cout << "BIT_16: " << BIT_16 << "\n";
cout << "BIT_8: " << (int)BIT_8 << "\n";
BIT_8 = BIT_16;
cout << "BIT_8 after: " << (int)BIT_8 << "\n";
BIT_8 = BIT_16 >> 8;
cout << "BIT_8 after shift: " << (int)BIT_8 << "\n";
我得到了输出
BIT_16: 65281
BIT_8: 0
BIT_8 after: 1
BIT_8 after shift: 255
如果我将 16 位类型转换为 8 位类型,是否保证会丢失前导字节?还是未定义,上面的结果是运气?
【问题讨论】:
-
小 - 针对 x86
-
字节序在这里没有影响。
-
字节顺序仅在考虑字节顺序时才重要,此处并非如此。
-
C 规范将“最重要”字节称为被丢弃的字节。这意味着行为是明确定义的,无论是小端还是大端。