源码、反码、补码(超详细解析)

源码、反码、补码(超详细解析)在现代的计算机中主要采用的数字集成电路完成 数字电路通过高低电平只能表示 0 和 1 所以就出现了 计算机只会识别 0 和 1

大家好,欢迎来到IT知识分享网。

目录

一、基础知识补充

   (1)计算机的语言表示:

    (2)计算机的基础单位和数据类型:

    (3)二进制数

二、源码、反码、补码

(1)概念

(2)理解

    1.源码

    2.反码

    3.补码

三、共勉


一、基础知识补充

   (1)计算机的语言表示:

    在现代的计算机中主要采用的数字集成电路完成,数字电路通过高低电平只能表示0和1,所以就出现了,计算机只会识别0和1。无论是存储还是计算,计算机均采用二进制体系完成。

    例如:十进制 4 ———- 用二进制表示为 100

    (2)计算机的基础单位和数据类型:

    1. bit———— 比特

    2. byte ——— 字节 ————- 1byte = 8bit

    3. KB ———— 千字节 ———- 1KB = 1024byte

    4. MB ———– 兆 —————- 1MB = 1024KB

    5. GB ———– 吉字节 ———- 1GB = 1024MB

    6. TB  ———– 太字节 ———- 1TB = 1024GB

    7. PB ———– 拍字节 ———– 1PB = 1024TB

其中在C语言中的一些特定的数据类型存储也是有一定的范围的:

    1. char ——– 1字节                     2. short ——— 2字节

    3. int ——– 4字节                        4. long ———- 4字节

    5. long long ——– 8字节             6. float ———- 4字节

    7.double ———- 8字节

    (3)二进制数

    数字在计算机中的二进制表示形式也被称为机器数,其中 二进制数有两个特点:

    1. 二进制数是带符号的,即分正、负数。其中若是正数最高位显示 0 ,若是负数最高位显示 1

    2. 二进制位通常也会受到数据类型的限制,比如 char 型 1 个字节 8 个比特位。

    举例:int 2 ;  ——————二进制表示:00000000 00000000 00000000 00000010

二、源码、反码、补码

(1)概念

    1. 应用范围:源码、补码、反码只能应用在整数中:正整数、负整数

    2. 在正整数中:源码 =反码 =补码

    3. 在负整数中:如果是负数,将源码的符号位不变,其余各位取反,得到反码

                              如果是负数,将反码 加  。1,得到补码

    举例:int a = 3 ;

int a = 3 ; // int整型为4字节,32个bit位 //源码:00000000 00000000 00000000 00000011 //反码:00000000 00000000 00000000 00000011 //补码:00000000 00000000 00000000 00000011 //因为是正整数所以 源码=反码=补码

    举例:int a = -3 ;

int a = -3 ; // int 为整型4个字节32个bit位 //因为是负数,所以最高位是 1 //源码: 00000000 00000000 00000011 //源码符号位不变,其余各个位按位取反,得到反码 //反码:    //反码+1,得到补码 //补码:   

    4.重点区分:整形表达式计算使用在内存中的是补码。

                         打印和看到的都是源码。

(2)理解

    估计大家应该有和我开始学习时一样的想法,计算机直接使用二进制就好了,为啥要区分源码、反码、补码。其实对于计算机而言,实现加法相对简单,相反减法就显得有些复杂,需要考虑借位逻辑,很难实现且效率太低,慢慢的减法器就被加法器给替代了,使得算法更加的简单和高效。

    下面我将依次对源码、反码、补码进行分析,并说明为什么,二进制运算使用补码。

    1.源码

    使用源码运算正整数加法时没有问题的,因为正整数的源码=反码=补码

    举例:两个正整数相加,二进制加下来也是10

int a = 5 ; // int为4字节32个bit位 int b = 5 ; // 00000000 00000000 00000000 00000101 --二进制 int sum=0 ; sum = a + b ; // 00000000 00000000 00000000 00000101 // 00000000 00000000 00000000 00000101 相加 // 此时sum = 10 // 00000000 00000000 00000000 00001010 ---二进制 

    此时使用负整数去运算相加。

int a = 3; // 00000000 00000000 00000000 00000011 3的源码=反码=补码 int b = -2; //  00000000 00000000 00000010 -2的源码 int sum = 3 + (-2) ; //相加 //  00000000 00000000 00000101 此时结果为-5 

    2.反码

    针对于反码,其实弥补了源码不能实现减法运算的问题,但是最高位会发生进位,需要低位加1,此时的运算效率就会大大的降低。

    举例:计算3+(-2)就会发现结果为1。

int a = 3 ; // 00000000 00000000 00000011 源码=反码=补码 int b = -2 ;//  00000000 00000010 -2的源码 //    -2的反码 //此时将两个反码相加 // 最高位多出的(1)  00000000 00000001 --1

    举例:计算1+(-1)

int a = 1 ; // 00000000 00000000 00000000 00000001 源码=反码=补码 int b = -1 ; //  00000000 00000000 00000001 -1的源码 //     -1的反码 // 此时让 a+b 两个反码相加 //     结果也为0 

    这种情况发现 和 00000000 此时都为0,计算机中很难判断。所以得出结论反码能实现加减法,但是有瑕疵,且效率低。

    3.补码

    补码应用在计算机二进制,计算、存储的编码格式,同时解决了源码的缺陷和反码的瑕疵。其中在高位溢出是,可以直接丢弃。

    举例:3 + (-2)

int a = 3 ; // 00000000 00000000 00000000 00000011 源码=反码=补码 int b = -2 ; //  00000000 00000000 00000010 -2的源码 //     -2的反码 //     -2的补码 //此时两个数的补码相加 //  00000000 00000000 00000001 最高位溢出一个1,直接丢弃 //最终结果 00000000 00000000 00000000 00000001 ----1

    举例 :1+(-1)

int a = 1 ; // 00000000 00000000 00000000 00000001 源码=反码=补码 int b = -1 ; //  00000000 00000000 00000001 -1的源码 //     -1的反码 //     -1的补码 //此时两个数的补码相加 //最终结果: 00000000 00000000 00000000 做高位溢出一个1 ,直接丢弃 //最终结果:00000000 00000000 00000000 00000000 ----0

    最终 很去确切的输出了0,并没有反码那么繁琐,此时补码就体现出它不仅可以实现加减法运算而且算法运算更加的简单,计算效率更高。

三、共勉

    这篇文章就是我对计算机中源码、反码、补码的理解,如果大家有什么问题可以在评论区提出来哦,我们大家一起加油,冲冲冲!!!

    下一期,我会在这篇文章的基础上提出 按位与、按位或、按位异或、移位操作符的理解,希望大家继续关注我,我会第一时间更新的哦!!!

源码、反码、补码(超详细解析)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/146570.html

(0)
上一篇 2025-04-13 18:33
下一篇 2025-04-13 18:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信