uint32_t分配给uint8_t的行为总是一样吗?

时间:2013-11-20 22:19:49

标签: c

uint32_t var32;
uint8_t var8;
var32 = 0xFEEDABCD;
var8 = 0;
var8 = var32;

以上代码是否始终(意味着平台依赖,如Windows vs Linux等)是否具有以下值:

var32 = 0xFEEDABCD

var8 = 0xCD

2 个答案:

答案 0 :(得分:2)

是的,它会的。无符号整数溢出由标准明确定义,并且必须遵循模{ - 1}}语义。

答案 1 :(得分:0)

请注意,OP正在考虑“将uint32_t分配给int8_t”,我认为这种情况实际上符合C99 6.3.1.3/3,并且行为尚不明确。

  

6.3.1.3有符号和无符号整数

     

1将整数类型的值转换为_Bool以外的其他整数类型时,如果该值可以用新类型表示,则该值不变。

     

2否则,如果新类型是无符号的,则通过重复添加或减去比新类型可表示的最大值多一个值来转换该值,直到该值在新类型的范围内。49)

     

3否则,将对新类型进行签名,并且无法在其中表示值;结果是实现定义的,还是引发实现定义的信号。