从补码的来源剖析到为啥补码=原码按位取反+1

本文探讨了补码的概念来源,解释了为何补码等于原码按位取反加1。通过分析8位二进制数表示正负数的情况,指出为了确保相反数相加等于0,引入补码编码。补码的计算方法与二进制减法规则有关,按位取反再加一确保了在有限位数下,正负数的补码相加结果为0,解决了二进制减法中的进位丢失问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.引入问题

你已经困惑了很久,你明明知道 补码就是按位取反,然后加一,但是你想知道的,不是它怎么求滴,而是,它怎来滴。当然,对于阅读这篇文章的你,既然想要知道这个答案,一定是有一定编程基础的读者,肯定知道补码与有符号数与无符号数的关系(有符号数指带有正负号的数,无符号可以理解为只大于0的数),你所查阅的所有资料首先都会用一个8位的二进制数给你举例,ok,我们也用一个8位的二进制数。

2.补码的来源

             8位二进制数,最小00000000,最大数11111111,换算十进制为0 ~ 255,当然,所有的参考资料都会这样讲,而且这也不是你想要的,但我们必须说下去。1 ~ 255,一共255的字符,再加上最前面的0,一共256个字符。

     现在,我们要用一个8位二进制数字来表示一个负数,可是二进制里没有负号,谁都知道二进制里只有0,1,再无其他符号。那么所以我们必须用一种方式来代替正负,也就是我们规定,当然是人规定的,而不是电脑,我们规定这个8位的二进制数的最前面一位数来表示这个数的正负,0代表是正,1代表是负。

       那么当第一位是0时,我们一共可以表示00000000 ~ 01111111这么多正数,因为第一位必须是0来代表正数;当第一位是1时,我们一共可以表示10000000~11111111这么多负数,然后,我们用00000000 ~ 01111111来代表0 ~ 127,那岂不是10000000~11111111代表  -0  ~  -127??可是

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值