在c编程中右移。

时间:2015-01-31 12:38:53

标签: c gcc c99 endianness

考虑表达式x>> y,这里x是signed int,最左边的位是1那么结果取决于机器? 我已经尝试了签名int,最左边的位是0我得到了相同的结果,但我不知道给定的情况。

1 个答案:

答案 0 :(得分:2)

没有明确的“最左边”或“最右边”位(取决于约定),但是最重要和最不重要的位。 2的补码机上的符号位是最重要的位。


如果移位为>>,则

unsigned使用零扩展。

正符号值的行为类似于正无符号值。但是,负数量的>>是实现定义的,但无论我在何处使用它,负数都已经过符号扩展。

此外,将某些内容左移到符号数量的符号位是未定义的行为,因此对于大多数可移植程序,最好只使用bithift技巧来表示无符号值。