2013-08-22 10 views
2

我在某处读取按位移动自动将操作数转换为int。但我不确定该声明是否应该以“如果操作数是不平等类型”来限定。位移是否自动将字符提升为int?

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

第二行的默认结果是int还是char?

+0

@MarkRansom:我不认为这是一个很好的重复。这个问题解决了通常的算术转换不被执行的事实。这个问题解决了整数升级被执行的事实。 –

回答

2

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

根据C 2011(N1570)6.5.7,“对每个操作数执行整数提升。 “

根据6.3.1.1 2,整数升级为,对于整数类型的对象或表达式,排名小于或等于秩为intunsigned int:“如果int可以表示原始类型的所有值(由宽度限制,对于位字段),则该值将转换为int;否则,它是在堆栈溢出转换为无符号整型。”


已经有讨论别处从它似乎一个奇异C实现可以具有相同的宽度的charint ,这会导致一些不寻常的行为。

1

C11标准,部分6.5.7按位的移位运算符,指出:

整数优惠在每个操作数的执行。结果的类型是 升级左操作数的类型。

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

相关问题