二进制总结

二进制补码:

0000:0

1111:-1

0111:7

1000:-8

0110:6

1001:-7

 

-1:0000--》1111

-n=~n+1

补码面试题:

System.out.println(Integer.MIN_VALUE-Integer.MAX_VALUE);   //1000 - 0111--->1000+1001=1

System.out.println(Integer.MIN_VALUE-1);   //1000 + 1111--->0111=最大值  A
选择如上代码的运行结果:
A. 2147483647 B.-2147483648 C.4294967296 D.1 E.-1

~ 取反
System.out.println(~88);
选择如上代码的运行结果:
A. 88 B.-88 C.89 D.-89 E.98

>>> >> << 移位运算

01100100 2^6+2^5+2^2=64+32+4=100
m = n<<1; //011001000 2^7+2^6+2^3=128+64+8=200
k = n<<2; //0110010000 2^8+2^7+2^4=256+128+16=384+16=400
相当于位移1位,乘2

>>> 向右移动, 高位永远补0, 负数时候不符合数学除法规律。
>> 数位向右移动, 高位为1(负数) 则补1, 高位为0(正数) 则补0, 保持符号位不变, 其结果符合数学除法规律(自动向小方向取整)

 

& | 与 或 运算
经典用途: 截取一个数据的后8位, 称为"掩码(mask)"运算
n = 01100011 00100110 00110111 11011110
m = 00000000 00000000 00000000 11111111 mask
k = n&m;
k = 00000000 00000000 00000000 11011110

123是十进制,但0123则表示采用八进制, 0x1表示一个16进制数

posted @ 2020-11-20 16:09  油坊桥山人  阅读(143)  评论(0编辑  收藏  举报