数的二进制表示及移位运算

在计算机中,数值一律用补码表示。

先来看一个例子

为方便以8位正数举例

int a=1

此时a的原码: 00000001 (直接取二进制,正数的符号位为0,不足的地方补0)

反码 01111110(除符号位外对原码按位取反)

补码  00000001 (反码最右边+1即为补码)

现在可以看到正数的补码和原码相同


int b=-1

此时先取b的原码: 100000001  (直接取二进制,负数的符号位为1,不足的地方补0)

 111111110   (除符号位以外对原码按位取反)

 111111111    (反码最右边+1即为补码)


关于有符号数的移位:

正数(原)的编码从第一到第三十二依次右移,再在最最前端补0  
负数(补)的编码从第一到第三十二依次右移,再在最最前端补1  
左移都是在末尾补0。


关于无符号数的移位:

可视为与有符号的正数移位行为一致。

严格来说:有一个逻辑移位与算数移位的概念


PS:数值的二进制表示形式在windows上可用itoa来看。

int p=1;

char str[260] = { 0x00 };

_itoa(p, str, 2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值