您的位置:首页 > 编程语言 > C语言/C++

C/C++中的移位运算

2016-04-01 11:53 363 查看
在计算机中,数值是以补码来表示和存储的。所以移位运算都是在“补码”上进行操作的。

原码转补码

正数的补码与原码相同。

负数的补码:符号位为1,其余位是原码按位取反(反码),然后整个数加1。

补码转原码

补码的符号位为0,正数的原码=补码

补码的符号位为1,负数的原码=补码的补码。即符号位不变(1),其余各位取反,再加1.

-5的源码:

1000 0101

补码:

1111 1011

按位右移:

cout << (-5>>1) << endl;


补码左移:1111 1011 -> 1111 1101

输出源码,1111 1101的原码为:

1000 0011 (十进制:-3)

按位左移:

cout << (-5<<1) << endl;


补码左移:1111 1011 -> 1111 0110

输出原码:1111 0110 -> 10001010 (十进制:-10)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: