进制转换以及原码、反码、补码
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
28161010
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的补码可以由这两个数的补码相加得出来!⽽⾮这两个数的原码相加得出来的!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论