进制详解

位数:从右到左为由低到高。最高位就是最左边的第一位

1.二进制的最高位是符号位:0正数,1负数

2.正数的原码,补码,反码都一样

3.负数的反码=它原码符号位不变,其他位取反(0->1,1->0)。注意反码和取反(~)运算的区别,反码符号位不变,其他取反。而取反运算包括符号位都要取反

4.负数的补码=它的反码+1 

5.0的反码,补码都是0

6.java没有无符号数,java的数都是有符号的

7.计算机运算的时候,都是以补码的方式运算

如:int a=1;最低位表示2^0,就是最后一位:2^(1-1) ,倒数第二位:2^(2-1),倒数第三位:2^(3-1)

00000000 00000000 00000000 00000001 –>表示1*2^0

00000000 00000000 00000000 00000011->表示1+1*2^1  

00000000 00000000 00000000 00000111->表示1+ 1*2^1  +1*2^2

 

求:1+1=?,因为两个都是正数,所以计算的时候虽然是以补码的方式,但正数的补码和原码一样

00000000 00000000 00000000 00000001

+00000000 00000000 00000000 00000001

       00000000 00000000 00000000 00000010(逢二进一,上下1+1=2

 =0*2^0+1*2^1=2

求:1-2=?,实际就是求1+-2),1的补码就是原码,-2的补码是它的反码+1,而它的反码是符号位不变,其他取反

1的原码:00000000 00000000 00000000 00000001 

1的补码:00000000 00000000 00000000 00000001 

-2的原码:   10000000 00000000 00000000 00000010

-2的反码:  11111111 11111111 11111111 11111101

-2的补码=反码+1                  

11111111 11111111 11111111 11111101

+00000000 00000000 00000000 00000001

=11111111 11111111 11111111 11111110       

 

1+-2=

1的补码+-2)的补码:

00000000 00000000 00000000 00000001

+ 11111111 11111111 11111111 11111110

=11111111 11111111 11111111 11111111 (因为符号位(最高位)是1,所以表示负数,所以运算的结果是为补码,所以要将补码转成原码:反码=补码-1,然后将反码的符号位不变,其他位取反)

  11111111 11111111 11111111 11111111

-         00000000 00000000 00000000 00000001

=  11111111 11111111 11111111 11111110(反码)->进行取反

   10000000 00000000 00000000 00000001 (原码)

= -1

位运算符(~|&^

求:~2=?(取反,0->1,1->0,符号位一样要去反)注意反码和取反的区别,反码符号位不变,其他取反

2的原码:                     00000000 00000000 00000000 00000010

取反:          11111111 11111111 11111111 11111101 (符号位是1,所以是负数,得到的那就是补码)

反码=补码-1   -00000000 00000000 00000000 00000001

                      =  11111111 11111111 11111111 1111100

原码=反码取反:  10000000 00000000 00000000 00000011

               =-1+1*2^1

                                =-3

求:~-5=?(取反,0->1,1->0,符号位一样要去反),对负数取反,就是对负数的补码进行取反

-5的原码:10000000 00000000 00000000 00000101

-5的反码:11111111 11111111 11111111 11111010      (反码=符号位不变,其他取反)

                +   00000000 00000000 00000000 00000001    

-5的补码:11111111 11111111 11111111 11111011

-5的补码进行取反

00000000 00000000 00000000 00000100(符号位为正数,补码和原码一样)

=4

求:2&3=?按位与(两位全为1,则为1

200000000 00000000 00000000 00000010

300000000 00000000 00000000 00000011

=  00000000 00000000 00000000 00000010

=2

求:2|3=?按位或(有一个1,则为1

=  0000000 00000000 00000000 00000011

=3

 

:-3^3=?(异或,两个不同才为1

-3的原码:10000000 00000000 00000000 00000011

-3的反码:11111111 11111111 11111111 11111100

-3的补码:11111111 11111111 11111111 11111101

3的补码: 00000000 00000000 00000000 00000011

异或:     11111111 11111111 11111111 11111110(最高位为1,是负数,得到的是补码,将他转成原码)

反码:     11111111 11111111 11111111 11111110

           00000000 00000000 00000000 00000001

                            =11111111 11111111 11111111 11111101(减时:将11111110退一位(不就是变成2吗)类似11111102

然后11111102-00000001=11111101

原码:    10000000 00000000 00000000 00000010(反码取反。符号位不变)

                     =-2

移位运算(<<,>>>,>>)在内存中运算,非常快

移位运算都是以补码的形式运算

求:1>>2(低位溢出,符号位不变,并用符号位补溢出的最高位):2表示两位

1的补码:

0000000 00000000 00000000 00000001 然后向右移2位,则1跑出了32位中,其他的用0补齐

0(00)00000 00000000 00000000 00000000 0101跑出去了,左边的向右移2位,符号位不变,并用符号位补最高位(因为0为符号位,所以用0去补)所以结果为0

 

求:-1>>2

-1的补码:11111111 11111111 11111111 11111111 向右移2位,符号位不变,其他的用符号位补齐

                        1(11)1111 11111111 11111111 11111111 1111被溢出来了,然后用符号位补齐。因为符号位为1,所以用1去补齐。因为符号位为1,所以为负数,得到的是补码,所以将补码得到原码

补码:11111111 11111111 1111111 11111111

反码:11111111 11111111 1111111 11111110

原码:10000000 00000000 00000000 00000001

=-1

求:1<<2 (符号位不变,低位补0,移动一位相当于乘以2^1,移动2位相当于乘以2^2

所以1*2^2=4

:2<<2 = 2*2^2=8

  求:-1<<2 ->-1*2^2=-4

  : 2<<4-> 2*2^4=32

  求:1<<1  -> 1*2^1=2

 

 

 求:3>>>2 (低位溢出,高位补0

3的补码:00000000 00000000 00000000 00000011

向右移2为:0(00)00000 0000000000 00000000 00000000 11

      =0

F表示一个16进制,因为一个字节一个8位,所以一个字节等于2个16位。

向右移24为,就是将01111111 11111111 11111111 11111111变为00000000 00000000 00000000 01111111

将第一位(最高位)的第一个0移动到最后一位(最低位)的第一个0。从左到右:位数由高到低

 

想要把一个int值存入流中,就要像上面一样存,先i>>>24I,因为int1个字节,write只能一个一个字节的存,所以先把最低位的1个字节存进去后,再存高位的

原文地址:https://www.cnblogs.com/lirenzhujiu/p/5751747.html