我在某处读到按位移位会自动将操作数转换为 int。但我不确定该语句是否应该用“如果操作数的类型不相等”来限定。
char one = 1, bitsInType = 8;
one << (bitsInType - one);
第二行的默认结果是 int 还是 char?
我在某处读到按位移位会自动将操作数转换为 int。但我不确定该语句是否应该用“如果操作数的类型不相等”来限定。
char one = 1, bitsInType = 8;
one << (bitsInType - one);
第二行的默认结果是 int 还是 char?
结果类型int
在普通的 C 实现中。1
根据 C 2011 (N1570) 6.5.7,“整数提升在每个操作数上执行。结果的类型是提升的左操作数的类型。”</p>
根据 6.3.1.1 2,对于等级小于或等于int和unsigned int等级的整数类型的对象或表达式,整数提升是:“如果一个int可以表示原始类型的所有值(受宽度,对于一个位域),该值被转换为一个int;否则,将其转换为无符号整数。”</p>
1在 Stack Overflow 的其他地方已经讨论过,似乎奇怪的 C 实现可能具有char
与 相同的宽度int
,这会导致一些不寻常的行为。
C11 标准,第 6.5.7 节按位移位运算符指出:
对每个操作数执行整数提升。结果的类型是提升的左操作数的类型。
这意味着将值转换为int
然后执行操作;你表达的结果是int
。