从int到char的赋值如何在C中起作用?

时间:2013-08-17 23:42:48

标签: c binary bit-manipulation

在C中为char分配int时会发生什么?它总是忽略左边的额外位吗?

示例(4个字节int):

unsigned char c = 0;
unsigned int i = 500;

c = i; // c is 244

c = i << 24 >> 24; //c is 244

i = i << 24 >> 24; //i is 244

在二进制文件中,50011111010024411110100

1 个答案:

答案 0 :(得分:6)

通常,这正是发生的事情。 ISO / IEC 9899:2011标准的第6.3.1.3节规定了在这种情况下必须发生的事情:

6.3.1.3有符号和无符号整数

  1. 当整数类型的值转换为另一个整数时 如果值可以由new表示,则除_Bool以外的类型 类型,它没有变化。
  2. 否则,如果新类型是无符号的,则转换为 重复加或减一个以上的最大值 可以用新类型表示,直到值在 新类型的范围。 60)
  3. 否则,新类型已签名且值不可 代表其中;结果是实现定义的或 提出了一个实现定义的信号。
  4. 60)规则描述了数学值的算术,而不是给定表达式的值。

    您的案件属于上述第2项(因为您的角色被宣布为无符号)。在典型的计算机算术中,结果将与您描述的完全一致。