c语言位运算负数的实例_负数位运算的右移操作-C语言基础

这一篇探讨的是“负数位运算的右移操作”,涉及到数据的源码、反码、补码的转换操作。属于C语言基础篇。

先看例子

#include

int main(void) {

//正数的位右移

//补码0000 0101

int x = +5;

//正数补码右移两位后

//补码0000 0001

printf("+5>>2 = %d\n", x>>2); //+5>>2 = 1

//负数的位右移

//补码1111 1011

int y = -5;

//负数补码右移两位后

//补码1111 1110

printf("-5>>2 = %d\n", y>>2); //-5>>2 = -2

}

输出结果。

好了,现在来解释一下这个输出结果是怎么来的。

在讨论负数的右移之前,我们先要了解一下什么是原码、什么是反码、什么是补码。

任何一个数据都有其唯一对应的原码、反码以及补码。计算机对于数据的处理都是以补码形式来进行的(至于为什么要这样就又可以展开一整篇文章来说明了,这里就不深入讨论了)。而且正数和负数的原反补码的转换规则是不一样的。

对于正数来说,其原、反、补码都是相同的,都是该数据的二进制形式。例如+5的原、反补码均为0000……0101(其中0的个数由该数据的类型以及计算机操作系统的位

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值