进制

进制

二进制:0,1 ,满 2 进 1,以 0b 或 0B 开头。

十进制:0-9 ,满 10 进 1。

八进制:0-7 ,满 8 进 1, 以数字 0 开头表示。

十六进制:0-9 及 A(10)-F(15),满 16 进 1,以 0x 或 0X 开头表示。此处的 A-F 不区分大小写。

二进制转十进制

从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,
然后求和。

0b 1 0 1 1=1*2的(1-1)次方+1*2的(2-1)次方+0*2的(3-1)次方+1*2的(4-1)次方法

=1+2+0+8=11

八进制转十进制

从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方
然后求和。

02 3 4=4*80+3*81+2*82

=4+24+128=156

十六进制转换成十进制

从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。

0x2 3 A=10*160+3*161+2*162

=10+48+512=570

十进制转换成二进制

将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。

34=>0B00100010;

34/2= 商为17 余数为0;

17/2= 商为8 余数为1;

8/2= 商为4 余数为0;

4/2= 商为2 余数为0;

2/2= 商为1 余数为0;

1/2= 商为0 余数为1;

二进制:0B00100010

十进制转换成八进制

将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。

132=>0204;

132/8= 商为16 余数为4;

16/8= 商为2 余数为0;

2/8= 商为0 余数为2;

八进制:0204

十进制转换成十六进制

将该数不断除以 16,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的十六进制。

237 => 0xED;

237/16 商为14 余数为13;

14/16 商为0 余数为14;

十六进制:0xED

二进制转换成八进制

从低位开始,将二进制数每三位(2^3=8)一组,转成对应的八进制数即可。

0b 11(3) 010(2) 101(5) => 0325

二进制转换成十六进制

从低位开始,将二进制数每四位(2^4=16)一组,转成对应的十六进制数即可。

0b 1101(D) 0101(5) => 0xD5

八进制转换成二进制

将八进制数每 1 位,转成对应的一个 3 位的二进制数即可。

0 2(010) 3(011) 7(111) => 0b10011111

十六进制转换成二进制

将十六进制数每 1 位,转成对应的 4 位的一个二进制数即可。

0x 2(0010) 3(0011) B(1011) = 0b001000111011

原码、反码、补码

1.二进制的最高位是符号位:0表示正数1表示负数(老韩口诀:0->0,1->-)

2.正数的原码,反码,补码都一样(三码合一)

3.负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)

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

5.0的反码,补码都是0

6.Java没有无符号数,换言之,Java中的数都是有符号的

7.在计算机运算的时以补码的方式来运算的

8.当我们看运算结果的时候,要看他的原码(重点)

位运算符

按位与&: 两位全为1,结果为1,否则为0

按位或 |: 两位有一个为1,结果为1,否则为0

按位异或^:两位一个为0,一个为1,结果为1

两位一个为0,一个为1,结果为1,否则为0

按位取反~:0->1,1->0

算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位

算术左移 <<: 符号位不变,低位补 0

Example:

//结果=1
System.out.println(~-2);

思路:首先因为在计算机运算的时以补码的方式来运算的

第一步先找到-2的原码

第二步然后找到-2的反码

第三步根据反码获取到-2的补码

第四步根据取反操作得到~-2的值

根据口诀二进制的最高位是符号位 0表示正数1表示负数 int类型4个字节 一个字节8个二进制位

第一步:-2的原码:1 0000000 00000000 00000000 00000010

根据负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)

第二步:-2的反码:1 1111111 11111111 11111111 111111 0 1

根据负数的补码=它的反码+1,负数的反码=负数的补码-1

第三步:-2的补码:1 1111111 11111111 11111111 111111 1 0 (1+1=2 0010)

按位取反~:0->1,1->0

第四步:~-2= 0 0000000 00000000 00000000 000000 0 1 (十进制=1)

//结果=2
System.out.println(2&3);

思路:首先因为在计算机运算的时以补码的方式来运算的

第一步先找到2的原码

2的原码 00000000 00000000 00000000 00000010

第二步然后找到2的补码(三码合一)

2的补码 00000000 00000000 00000000 00000010

第三步找到3的原码和补码

3的原码 00000000 00000000 00000000 00000011

3的补码 00000000 00000000 00000000 00000011

第四步按照按位&两位全为1,结果为1,否则为0计算结果

2:00000000 00000000 00000000 00000010

3:00000000 00000000 00000000 00000011

00000000 00000000 00000000 00000010 (十进制=2)

//结果=-3
System.out.println(~2); 

第一步先找到2的原码,补码(三码合一)

2的补码:00000000 00000000 00000000 00000010

第二步~2运算 按位取反~:0->1,1->0

~2:11111111 11111111 11111111 11111101

第三步运算结果的时候,要看他的原码(重点) 所以先把转码转换为反码

符号位1为负数 负数的反码=负数的补码-1

反码:1 1111111 11111111 11111111 11111100

第四步获取运算的原码 负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)

原码:1 0000000 00000000 00000000 00000011 (十进制=-3)

posted @ 2021-08-30 14:36  布卷-  阅读(559)  评论(0)    收藏  举报