考试总结(二)
一,原码
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中正整数是以原码形式存储的,负整数是以补码形式储存的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏