位移是否会自动将字符提升为int?

时间:2013-08-22 01:21:47

标签: c bitwise-operators bit bit-shift

我读到某处,按位移动会自动将操作数转换为int。但是我不确定该语句是否应该用“如果操作数是不相等的类型”来限定。

char one = 1, bitsInType = 8;
one << (bitsInType - one);

第二行的默认结果是否导致int或char?

2 个答案:

答案 0 :(得分:2)

在正常的C实现中,结果类型为int 1

Per C 2011(N1570)6.5.7,“对每个操作数执行整数提升。结果的类型是提升的左操作数的类型。“

根据6.3.1.1 2,整数促销是针对整数类型的对象或表达式,其等级小于或等于 int unsigned int 的等级: “如果 int 可以表示原始类型的所有值(受宽度限制,对于位字段),该值将转换为 int ;否则,它将转换为 unsigned int 。“


1 在Stack Overflow的其他地方已经讨论过,奇怪的C实现似乎可能具有与char相同宽度的int,这导致一些不寻常的行为。

答案 1 :(得分:1)

C11标准,第6.5.7节按位移位运算符,状态:

对每个操作数执行整数提升。结果的类型是 升级的左操作数。

这意味着将值转换为int,然后执行操作;表达式的结果是int