整数二进制转换

在进行二进制转化之前我们要知道计算机所有的事物存储都是以二进制存储的只有0与1,整数也不例外。

整数的存储包括符号位(1位)与数值位(n-1)位。符号位位0或者1,0代表位整数,1代表为负数。数值位根据数据类型来确定多少位。在JAVA中整数类型有四种:type(8位)   short(16位)   int(32位)   long(64位)。所以他们对应的数值位分别为7,15,31,63位。

其次我们要知道计算机存储的二进制有原码,反码,补码之分。计算机一般以补码表示数值。正整数的原码,反码,补码相同。负整数的原码,反码,补码不同。原码:符号位为1,数值位表示数值的绝对值。

                                                  反码:符号位为1,其余各位对原码取反。

                                                  补码:反码加1。

一、正整数转化成二进制

  首先要知道最左边一定是符号位,数值位从右向左为1依次代表1,2,4,8,16,32,64,128,256.。。。。

所以可以把一个正整数拆分成2的次方倍想加,这样就可以找到对应的位置。

例:

78=64+8+4+2    ————>     01001110     可以看到78拆成了64,8,4,2.这样可以知道在二进制里面代表64的位置上为1,代表8的位置上为1,同理。所以从代表64(最高位)开始想左写,有就写1,没有就写0.这样写完以后看左端补0.因为这是一个正整数,还要看他的取值范围。78在type范围之内,所以最少补一个0.

186=128+32+16+8+2——————>00000000 10111010   同上面一样,写出二进制之后,发现186已经超出了type的取值范围,所以他最小在short的取值范围之内,所以左端最少补8个0.

277=256+16+4+1————————>  00000001 00010101

注:其实应该补多少0不是自己判断的,而是题中给出的。比如第二个既可以补8个0,也可以补24个0.

二、负整数转化成二进制 与 二进制转化成十进制

因为负数的原码、反码、补码不相同所以写负整数有两个方法。

1、课本上的方法,先写出原码,后写出反码,然后写出补码。

原码符号位为1,数值位与其绝对值一样,所以可以用正整数的方法写出其原码的数值位。然后写反码,再写补码。

例:

-77:

原码:77=64+8+4+1————>1001101——>11001101

这就是先写出绝对值的数值位,然后把符号位写进去。

反码:10110010

补码:10110011

-155:

155=128+16+8+2+1——> 10011011——原码——>10000000 10011011——反码——>11111111 01100100——补码——>11111111 01100101

2、快捷方法

我们知道-1的二进制为11111111,所以我们可以-1出发直接写出负数的补码(计算机内存储的二进制)。

例:

-99=-1 - 64 - 32 - 2= 10011101        就相当于-1(11111111)减去一个64,把对应的位置1变成0,减去32把对应的1变成0依次下去,就是补码。

-177=-1- 128-32-16=11111111 01001111      因为-178超出了type的范围最少16位。

-128=-1-64-32-16-8-4-2-1=10000000    

二进制转化成十进制:

无论是整数的二进制转化成十进制还是负数的二进制转化成十进制,都必须先知道原码是多少,因为只有原码才是哪个位置上的1对应2的多少次方倍,才能计算相加。因为正整数的原码,反码,补码相同所以计算机里存储的二进制就相当于原码,正数二进制转化成十进制可以直接计算。而负数的原码,反码,补码都不相同所以计算负数的二进制需要先计算出负数的原码。已知负数计算机的二进制(补码),可以把数值位先取反,再+1就得到负数的原码了。(得到的原码数值位计算出来是这个负数的绝对值,在再加负号就可以。)

猜你喜欢

转载自blog.csdn.net/weixin_41423494/article/details/81947564