我无聊,翻译一下C中移位的规定:
1。每个操作数都应当是整数类型
2。每个操作数都先进行整型提升,结果类型是左操作数整型提升后的类型。如果右操作数为负数或大于等于左操作数整型提升后的位宽度,其行为是未定义的
(the behavior is undefined)。
3。对于E1<<E2
如果E1是unsigned类型:结果是……(地球人都知道),溢出时保留低位。
如果E1是signed类型:值为非负,且不溢出,结果是……(地球人都知道);否则,其行为是未定义的
(the behavior is undefined)。
4。对于E1>>E2
如果E1是unsigned类型,或者为signed类型但值非负,结果是……(地球人都知道)
如果E1是signed类型,且值为负,结果是 实现定义的
(implementation-defined)。