c语言负数左移右移_C语言负数的移位运算

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);


版权声明:本文为weixin_39975810原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。