考试总结(二)

一,原码

1,正数的原码:将正数转换为二进制位就是这个正数的原码(高位为0,表示为正数,这个位置是符号位。)

例如:在计算机中,int 类型的十进制数10,的原码为:00000000 00000000 00000000 00001010。

           在计算机中,int 类型的十进制数8,的原码为:00000000 00000000 00000000 00001000。

2,负数的原码:将负数的绝对值转换成二进制位然后在最高位前补1就是这个负数的原码。(这个位置是符号位。)

例如:在计算机中,int 类型的十进制数-10,的原码为:10000000 00000000 00000000 00001010。

           在计算机中,int 类型的十进制数-8,的原码为:10000000 00000000 00000000 00001000。

二,反码

1,正数的反码:正数的反码就是原码。

例如:在计算机中,int 类型的十进制数10,的原码,和反码都为:00000000 00000000 00000000 00001010。

           在计算机中,int 类型的十进制数8,的原码,和反码都为:00000000 00000000 00000000 00001000。

2,负数的反码:负数的反码等于原码除符号位以外所有的位取反(即,除符号位以外,原码为1,则反码相对位置为0)

例如:在计算机中,int 类型的十进制数-10,的原码,和反码都为:11111111 11111111 11111111 11110101。

           在计算机中,int 类型的十进制数-8,的原码,和反码都为:11111111 11111111 11111111 11110111。

三,补码

1,正数的补码:正数的补码与原码相同,

例如:在计算机中,int 类型的十进制数10,的原码,反码和补码都为:00000000 00000000 00000000 00001010。

           在计算机中,int 类型的十进制数8,的原码,反码和补码都为:00000000 00000000 00000000 00001000。

2,负数的补码:负数的补码为 其原码除符号位外所有位取反,然后最低位加1(即反码加一)

(注:负数的求反码和补码的取反过程符号位是不参与计算的,要取出来,只有在进行负数补码的加减法的时候符号位才参与计算  ).

例如:在计算机中,int 类型的十进制数-10,的原码,反码和补码都为:11111111 11111111 11111111 11110110。

           在计算机中,int 类型的十进制数-8,的原码,反码和补码都为:11111111 11111111 11111111 11111000。

程序测试:

public class binary {
public static void main(String[] args) {
System.out.println("Java二进制10: "+Integer.toBinaryString(10));
System.out.println("Java二进制8: "+Integer.toBinaryString(8));
System.out.println("Java二进制-10: "+Integer.toBinaryString(-10));
System.out.println("Java二进制-8: "+Integer.toBinaryString(-8));
}

}

 

 

三种码出现的原因:原码是被人脑直接识别并用于计算表示方式,但因为人脑可以知道第一位是符号位,在计算的时候我们会根据符号位,选择对真值区域的加减。(真值的概念在本文最开头) 但是对于计算机,加减乘数已经是最基础的运算,要设计的尽量简单,计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂,于是人们想出了将符号位也参与运算的方法。我们知道,根据运算法则减去一个正数等于加上一个负数,即:1-1 = 1 + (-1) = 0, 所以机器可以只有加法而没有减法,这样计算机运算的设计就更简单了,于是人们开始探索将符号位参与运算,并且只保留加法的方法。如果用原码表示,让符号位也参与计算,显然对于减法来说,结果是不正确的。这也就是为何计算机内部不使用原码表示一个数。发现用反码计算减法,结果的真值部分是正确的。而唯一的问题其实就出现在"0"这个特殊的数值上,虽然人们理解上+0和-0是一样的,但是0带符号是没有任何意义的,而且会有[0000 0000]原和[1000 0000]原两个编码表示0。于是补码的出现,解决了0的符号问题以及0的两个编码问题:为了解决原码做减法的问题, 出现了反码。

参考于百度

三种码的关键点:

(1)二进制的最高位是符号位:0表示正数,1表示负数

(2)正数的原码,反码,补码都相同

(3)负数的反码=原码符号位不变,其他位取反

(4)负数的补码=他的反码+1 负数的反码=他的补码+1

(5)0的反码,补码都是0

(6)java没有无符号数,java中的数都是有符号的

(7)在计算机运算时,都是以补码的方式运算的

(8)当我们看运算结果的时候,要看他的原码

参考于韩顺平讲java

 

五,总结

              1,正数的反码和补码都与原码相同。

      2,负数的反码为对该数的原码除符号位外各位取反。

    3,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1

               4,在java中正整数是以原码形式存储的,负整数是以补码形式储存的。

 

posted @   奉禾  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示
主题色彩