目录
说明
在计算机里面一个数值是使用二进制的补码进行保存(原码、补码、反码)
机器数
一个数在计算机中的表现形式叫做机器数,这个数有正负之分,在计算机中用一个数的最高位(即为符号位)用来表示它的正负,其中0表示正数,1表示负数。
原码
用第一位表示符号,其余位表示值。因为第一位是符号位,所以8位二进制数的取值范围就是:[1111_1111 , 0111_1111] 即 [-128 , 127]
原码是容易被人脑所理解的表达方式
反码
正数的反码是其本身。负数的反码是符号位保持不变,其余位取反。例如正数1的原码是[0000_0001],它的反码是是其本身
[0000_0001],-1的原码是[1000_0001],其反码是[1111_1110]
补码
正数的补码是其本身。负数的补码是在其反码的基础上+1,例如正数1的原码是[0000_0001],他的补码是其本身[0000_0001],
-1的补码是[1111_1110]+1=[1111_1111]
二进制
在java里面使用0b或者0B作为前缀表示这个数为二进制的数值 例如:0b01010011
最高位是符号位:正数为0 负数为1
二进制转换为10机制操作(规律:m*2^(n-1)),n表示当前的第几位

练习:求-1的二进制,假设位数是8位

扩展:知道-1的二进制,那么-9的二进制为

八进制
3位的2进制可以表示一个8进制的数值,从低位开始,每三位一组,不够则补0
在java里面使用0作为前缀表示这个数为八进制的数值 例如:0776 (规律:m*8^(n-1)):7*8^2+7*8^1+6*1==510

十六进制
0~9 abcdef【10、11、12、13、14、15】(规律:m*16^(n-1))
在java里面使用0x或者0X示这个数为十六制的数值 例如:0X76ee

一定要掌握二进制如何转换为8、10、16进制,反之一样
0111_1011_0110_1110 转换为16进制(一般用下划线来分割)
0x7b6e
01_101_110 转换为8进制
0156
01110110 转换为10进制
64+32+16+4+2=118
进制转换记忆
下面是一些记忆它们之间转换顺序的方法:
- 二进制到十进制:二进制数中的每一位数都对应着一个特定的十进制数。例如,二进制的
101(表示为1后面跟着0和1)转换为十进制是5。 - 十进制到二进制:将十进制数除以
2,得到商和余数,然后用余数作为新的被除数,重复这个过程,直到商为0。将每次得到的余数逆序排列,就可以得到对应的二进制数。例如,十进制的5转换为二进制是101。 - 八进制到十进制:八进制数中的每一位数都对应着一个特定的十进制数。例如,八进制的
123(表示为1后面跟着2和3)转换为十进制是51。 - 十进制到八进制:将十进制数除以
8,得到商和余数,然后用余数作为新的被除数,重复这个过程,直到商为0。将每次得到的余数逆序排列,就可以得到对应的八进制数。例如,十进制的51转换为八进制是123。 - 十六进制到十进制:十六进制数中的每一位数都对应着一个特定的十进制数。例如,十六进制的
1A(表示为1后面跟着A,其中A代表10)转换为十进制是26。 - 十进制到十六进制:将十进制数除以
16,得到商和余数,然后用余数作为新的被除数,重复这个过程,直到商为0。将每次得到的余数逆序排列,就可以得到对应的十六进制数。例如,十进制的26转换为十六进制是1A。
记忆这些转换顺序的一个好方法:记住每个进制系统的基数,并理解每个进制系统中每个位置代表的数值范围。例如,在二进制中,只有0和1,而在十六进制中,有0-9以及A-F(分别代表10-15)。
本文详细解释了计算机中数值表示的几种方式,如原码、反码和补码,以及二进制、八进制和十六进制之间的转换规则,并提供了Java中的表示方法。通过实例展示了如何计算-1和-9的二进制表示,并介绍了进制转换的记忆技巧。
1万+

被折叠的 条评论
为什么被折叠?



