2进制,用两个阿拉伯数字:0、1;
8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;
10进制,用十个阿拉伯数字:0、1、2、3、4、5、6、7、8、9;
16进制,用十六个阿拉伯数字:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
(A是10)
后缀:O表示八进制数 H表示十六进制 B表示二进制 D表示十进制数
8进制是用3位二进制数来代替每一位八进制数
16进制是用4位二进制数来代替每一位十六进制数
10进制数:
10进制数转换为几进制就除以几,直到除到商为0,则所有余数的倒序则为转换结果!
2进制数:
2 -> 8 :把二进制数每三位一组,然后每三位的最高位为4,第二位为2,最低位为1
((1100100)2=(001 100 100)2=(1 4 4)8)
2 -> 10 :利用权值计算:
0110 0100,转换为10进制为0 * 2 ^ 0 + 0 * 2 ^ 1 + 1 * 2 ^ 2 + 0 * 2 ^ 3 + 0 * 2 ^ 4 + 1 * 2 ^ 5 + 1 * 2 ^ 6 + 0 * 2 ^ 7 = 100
2 -> 16 :把二进制数每四位一组,分别转换为十六进制(利用权值计算),每四位的最高位为8,第二位为4,第三位为2,最低位为1
11101101转换方法:结果为ED
高位:1110=1x8 + 1x4 + 1x2 + 0x1=(14)十进制=(E)十六进制,8为2的三次方权值,4为2的二次方权值
低位:1101=1x8 + 1x4 + 0x2 + 1x1=(13)十进制=(D)十六进制,
8进制数:
8 -> 2 :每位八进制数用3位二进制数表示
(37.416)8 =>011 111 .100 001 110 =>(11111.10000111)2 然后每三位的最高位为4,第二位为2,最低位为1
8 -> 10 :利用权值计算:八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方...
将八进制数12.6转换成十进制数
(12.6)8 = 1×8^1 + 2×8^0 + 6×8^-1 = (10.75)10
8 -> 16 :先将八进制化为二进制,再将二进制化为十六进制
八进制数256 转换为16进制数=
(三位一组) 010, 101, 110 =
(四位一组) 0, 1010, 1110 = 0AE = AE
16进制数:
16 -> 2 :一位十六进制对应四位二进制数,每四位的最高位为8,第二位为4,第三位为2,最低位为1
十六进制数3FC3H转换为相应的二进制数: 将3FC3H从低位开始转换
3 --- 0011
C --- 1100
F --- 1111
3 --- 0011
将对应的二进制数按顺序排好,转换成二进制数的结果是0011 1111 1100 0011, 即11111111000011
16 -> 8 :先转为二进制再转为八进制
十六进制16AH转化为八进制数:
(16A)H =(0001 0110 1010)B = (101 101 010)B = (552)这个是八进制
16 -> 10 :16进制数第0位的权值为16的0次方,第1位权值为16的1次方,第2位权值为16的2次方……
7E8F
F*16^0+8*16^1+E*16^2+7*16^3=32399
只要记住2、8、16进制转换为10进制就可以了!因为10进制转换为其他进制就简单了!
10进制的小数转换为其他进制数的情况:
整数位:10进制数转换为几进制就除以几,直到除到商为0,则所有余数的倒序则为转换结果!
小数位:10进制数转换为几进制就乘以几,直到乘到为整数,则所有整数位的正序则为转换结果!
(0.3125*8=2.5 整数位为2 0.5*8=4 整数位为4 则小数位的结果为24)
(1)原码表示法
原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用1表示负号,数值一般用二进制形式表示。
例如,X1= +1010110
X2= 一1001010
其原码记作:
[X1]原=[+1010110]原=01010110
[X2]原=[-1001010]原=11001010
(2)补码表示法
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。
例如 [X1] = +1010110
[X1]原=01010110
[X1]补=01010110
[X2] =-1001010
[X2]原 =11001010
[X2]补 =10110101+1
=10110110
(3)反码表示法
机器数的反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。
例如:X1 = +1010110
[X1]原=01010110
[X1] 反=01010110
X2 = -1001010
[X2]原=11001010
[X2]反=10110101
(4)由补码求原码
正数:原码和补码一样
负数:符号位不动,其余位取反,然后+1
例如: 补码: 1111 1001
取反(符号位不动) 1000 0110
加1 1000 0111 = -7(D)
(5)由反码求原码
正数:原码和反码一样
负数:符号位不动,其余位为取反
例如: 补码: 1111 1000
取反(符号位不动) 1000 0111 = -7(D)
正数的原码和反码、补码是一样的!
在内存中计算机是用原码来表示正数的,用补码来表示负数的,并且是以十六进制显示的!
在这里,我们还要知道“不同的数据类型占据的空间不同”
通常:char为1字节,short为2个字节,int为4个字节,double为8个字节
1字节为8位,24=16,数据在内存中是以16进制显示的,所以char类型的数据是以2位十六进制数据显示的!
而int类型为4*8=32位,那么是以8位十六进制显示的!
补码运算可以一步实现目标,无论同号加法还是异号加法
而原码计算的话,要先判断符号,然后再比较绝对值,判断符号,需要三步,所以计算机都是用的补码
2+7=9
原码 反码 补码
+2 0000 0010 0000 0010 0000 0010
+7 0000 0111 0000 0111 0000 0111
+9 0000 1001 0000 1001 0000 1001
可以看出 (0000 1001)2 =910,因为是正数相加,所以用两个数的原码相加即可!
-9+7=-2
原码 反码 补码
+7 0000 0111 0000 0111 0000 0111
-9 1000 1001 1111 0110 1111 0111
-2 1000 0010 1111 1101 1111 1110
因为计算机内存中负数的表示形式为补码,所以-2的补码为1111 1110,而-2的补码可以由这两个数的补码相加得出来!而非这两个数的原码相加得出来的!