您的位置:首页 > 其它

二进制 十进制 八进制 十六进制 互转 原码、反码、补码、

2012-12-21 18:29 781 查看
二进制数据是采用位置计数法,其位权是以2为底的,逢2进1。


1.二进制与十进制间的相互转换:

  (1)二进制转十进制

  方法:“按权展开求和”

  例: (1011.01)2 =(1×2^3+0×2^2+1×2^1+1×2^0+0×2^(-1)+1×2^(-2) )10

  =(8+0+2+1+0+0.25)10

  =(11.25)10

  规律:个位上的数字的次数是0,十位上的数字的次数是1,......,依次递增,而十

  分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。

  注意:不是任何一个十进制小数都能转换成有限位的二进制数。

  (2)十进制转二进制

  · 十进制整数转二进制数:“除以2取余,逆序排列”(除二取余法

  例: (89)10 =(1011001)2

  89÷2 ……1

  44÷2 ……0

  22÷2 ……0

  11÷2 ……1

  5÷2 ……1

  2÷2 ……0

  1

  · 十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)

  例: (0.625)10= (0.101)2

  0.625X2=1.25 ……1

  0.25 X2=0.50 ……0

  0.50 X2=1.00 ……1


2.八进制与二进制的转换:

  二进制数转换成八进制数:从小数点开始,整数部分向左、小数部分向右,每3位为一组用一位八进制数的数字表示,不足3位的要用“0”补足3位,就得到一个八进制数。

  八进制数转换成二进制数:把每一个八进制数转换成3位的二进制数,就得到一个二进制数。

  八进制数字与二进制数字对应关系如下:

  000 -> 0 100 -> 4

  001 -> 1 101 -> 5

  010 -> 2 110 -> 6

  011 -> 3 111 -> 7

  例:将八进制的37.416转换成二进制数:

  3 7 . 4 1 6

  011 111 .100 001 110

  即:(37.416)8 =(11111.10000111)2

  例:将二进制的10110.0011
转换成八进制:

  0 1 0 1 1 0 . 0 0 1 1 0 0

  2 6 . 1 4

  即:(10110.011)2 = (26.14)8


3.十六进制与二进制的转换:

  二进制数转换成十六进制数:从小数点开始,整数部分向左、小数部分向右,每4位为一组用一位十六进制数的数字表示,不足4位的要用“0”补足4位,就得到一个十六进制数。

  十六进制数转换成二进制数:把每一个十六进制数转换成4位的二进制数,就得到一个二进制数。

  十六进制数字与二进制数字的对应关系如下:

  0000 -> 0 0100 -> 4 1000 -> 8 1100 -> C

  0001 -> 1 0101 -> 5 1001 -> 9 1101 -> D

  0010 -> 2 0110 -> 6 1010 -> A 1110 -> E

  0011 -> 3 0111 -> 7 1011 -> B 1111 -> F

  例:将十六进制数5DF.9 转换成二进制:

  5 D F . 9

  0101 1101 1111 .1001

  即:(5DF.9)16 =(10111011111.1001)2

  例:将二进制数1100001.111 转换成十六进制:

  0110 0001 . 1110

  6 1 . E

  即:(1100001.111)2 =(61.E)16


原码、反码、补码

假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为:

  00000000 00000000 00000000 00000101

  5转换成二进制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。

  现在想知道,-5在计算机中如何表示?

  在计算机中,负数以其正值的补码形式表达。

  什么叫补码呢?这得从原码,反码说起。

  

  原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。

  比如 00000000 00000000 00000000 00000101 是 5的 原码。

  反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

  取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)

  比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。

  称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。

  反码是相互的,所以也可称:

  11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。

  补码:反码加1称为补码。

  也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

  比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。

  那么,补码为:

  11111111 11111111 11111111 11111010 1 = 11111111 11111111 11111111 11111011

  所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。

  

  再举一例,我们来看整数-1在计算机中如何表示。

  假设这也是一个int类型,那么:

  1、先取1的原码:00000000 00000000 00000000 00000001

  2、得反码: 11111111 11111111 11111111 11111110

  3、得补码: 11111111 11111111 11111111 11111111

  

  正数的原码,补码,反码都相同,都等于它本身

  负数的补码是:符号位为1,其余各位求反,末位加1

  反码是:符号位为1,其余各位求反,但末位不加1

  也就是说,反码末位加上1就是补码

  

  1100110011 原

  1011001100 反 除符号位,按位取反

  1011001101 补 除符号位,按位取反再加1

  

  正数的原反补是一样的

  在计算机中,数据是以补码的形式存储的:

  在n位的机器数中,最高位为符号位,该位为零表示为正,为1表示为负;

  其余n-1位为数值位,各位的值可为0或1。

  

  当真值为正时:原码、反码、补码数值位完全相同;

  当真值为负时: 原码的数值位保持原样,

  反码的数值位是原码数值位的各位取反,

  补码则是反码的最低位加一。

  注意符号位不变。

  如:若机器数是16位:

  十进制数 17 的原码、反码与补码均为: 0000000000010001

  十进制数-17 的原码、反码与补码分别为:1000000000010001、1111111111101110、1111111111101111

十进制负数转为八进制或十六进制时,只需将十进制转为二进制的后,再转为相应的就可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: