【原码、反码、补码】小白看完都呲大牙

您所在的位置:网站首页 原码反码补码是什么意思呀怎么读 【原码、反码、补码】小白看完都呲大牙

【原码、反码、补码】小白看完都呲大牙

2024-07-12 15:49| 来源: 网络整理| 查看: 265

 

目录

 

前言:  

规则:

对于整数来说:在内存中,数据存放其实存放的是它的补码;数据的计算也是使用它的补码。

小小练习:下面代码的结果是()

总结: 

前言:  

        在32为机器上,计算机存储数据是用32个比特位来存储数据的,而一个比特位可以存储一个二进制位的0或1。那么在64位机器上,存储数据就是用64个比特位来存储数据。所以即使是一个数字,在32位机器上,也要用32个比特位(二进制位)来存储。在本篇博文中,以32位机器为例。

规则:

整数的2进制表示方法有三种,即原码、反码和补码有符号整数的三种表示方法中,包括符号位和数值位两部分,2进制序列中,最高位的1位是被当做符号位,剩余的都是数值位。 符号位都是用0表示“正”,用1表示“负”。

注:符号位可以参与加减运算

正整数的原、反、补码都相同。 负整数的三种表示方法各不相同。

原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。反码:将原码的符号位不变,其他位依次按位取反(该二进制位是0,就改写成1;是1则改写成0)就可以得到反码。补码:反码+1就得到补码。补码得到原码也是可以使用:取反,+1或者-1,取反的操作。

        如果你第一次接触原码、反码、补码,是不是觉得补码得到原码的第一种方法很容易理解就是:补码-1得到反码,得到的反码除符号位外按位取反得到就是原码。但不能一下就接受第二种方法?那我就在这里举个例子,帮助大家理解吧!

我们先写出-1的原反补:

-1的原码:10000000000000000000000000000001

-1的反码:11111111111111111111111111111110

-1的补码:11111111111111111111111111111111

开始补码 取反、+1

补码取反:100000000000000000000000000000000

+1:          100000000000000000000000000000001

取反、+1得到的结果与原码一样,所以这种方法也是行得通的。

 小提示:可以记住-1的补码二进制位全是1,因为我们经常会遇到它哦!

对于整数来说:在内存中,数据存放其实存放的是它的补码;数据的计算也是使用它的补码。

为什么呢?

我们举例说明。

计算1 - 1

CPU只有加法器,所以相当于1+(-1):

1的原码,反码,补码:00000000000000000000000000000001

-1的原码:10000000000000000000000000000001

-1的反码:11111111111111111111111111111110

-1的补码:11111111111111111111111111111111

若使用原码进行计算结果为:10000000000000000000000000000010即-2但正确结果是0

而我们使用补码进行计算,结果为:100000000000000000000000000000000

可以看到+1之后就有33个二进制位了,但是32位机器存储数据是用32个比特位来存储的,所以我们要选择舍弃一位比特位,在这里我们丢弃最高位。

所以,补码+1的结果是:00000000000000000000000000000000即0,答案正确

小小练习:下面代码的结果是() A.>B. sizeof(i)) { printf(">\n"); } else { printf("


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3