简介
在C语言的移位运算中(左移或者右移),一般来说,机器支持两种形式的右移:逻辑右移与算术右移。
逻辑右移
x>>k
逻辑右移在左端补k个0,如下:
操作 | 值1 | 值2 |
---|---|---|
参数x | 0110 0011 | 1001 0101 |
x>>4 | 0000 0110 | 0000 1001 |
算术右移
x>>k
算术右移是在左端补k个最高有效位的值,如下:
操作 | 值1 | 值2 |
---|---|---|
参数x | 0110 0011 | 1001 0101 |
x>>4 | 0000 0110 | 1111 1001 |
在C语言中,C语言标准并没有明确定义对于有符号数应该使用哪种类型的右移,然而,实际上几乎所有的编译器/机器组合都对有符号数使用算术右移,另外,对于无符号数,右移必须是逻辑的。