http://blog.csdn.net/e3399/article/details/7526230
在
c
中左移也就是所说的逻辑移位,
右端补
0
,而右移是算数移位,左端补齐的是最高位
的符号位。
故负数左移,有可能变成正数,但负数右移,肯定还是负数。
用
16
进制的形式对数据进行赋值
,这
16
进制的数代表的是补码。
i = 0xfffffff7; //0xfffffff7
是补码,而不是原码,故
i = -9
printf("%d %x\n", i, i);
i = -9;
printf("%d %x\n", i, i); //
故两个
printf
输出结果相同
/**********************************************************************
* Compiler: GCC
* Last Update: Tue 01 May 2012 07:31:44 PM CST
************************************************************************/
#include
int main(int argc, char **argv)
{
int i = 0x8000000f; //
这里的
0x8000000f
为
int
型数据的补码形式
int j =
i >> 3; //
右移是算术移位,
i
的值不变,
左端补齐的是符号位
int k = i
<
左移是逻辑移位,右端补
0
printf("%d %x\n", i, i);
printf("%d %x\n", j, j);
printf("%d %x\n", k, k);
i = -9;
printf("%d %x\n", i, i);
i = 0xfffffff7;
j = i >> 3;
k = i <
printf("%d %x\n", i, i);
printf("%d %x\n", j, j);
printf("%d %x\n", k, k);