irpas技术客

位运算符_jarvis314159_自身按位或

网络 1040

负数二进制表现形式

负数是以补码的形式表示,其转换方式,简单的一句话就是:先按正数转换,然后取反加1。负数的二进制最高位是1。 要将十进制的-10用二进制表示,先将10用二进制表示: 0000 0000 0000 1010 取反: 1111 1111 1111 0101 加1: 1111 1111 1111 0110 所以,-10的二进制表示就是:1111 1111 1111 0110

按位与( & ) ---- 同1为1,否则为0

1. 自身与自身按位与结果都为自身

System.out.println(88&88); 88

2. 任何数和0按位与都是0

System.out.println(88453413&0); 0

3. 奇数和1按位与得1;偶数和1按位与得0

System.out.println(56&1); 0 System.out.println(65&1); 1

4. N&(N-1)用于消去二进制最后一个1

x = 12 二进制:1100 x-1=11 二进制:1011 x&(x-1)=8 二进制:1000 1100的第二个1内消去

5. 如果一个数N是2的n次方,N&(N-1)=0

2 --> 10 4 --> 100 8 --> 1000 16 --> 10000 因为2的n次方这个数N的二进制表示中只有一个1,所以使用N&(N-1)将唯一的一个1消去,如果N是2的幂次,那么N&(N-1)得到结果为0 System.out.println(4096&4095); 0

6. 根据4的原理,可以获取一个数的二进制有多少个1

int num=124; int i=0; while (num>0){ num = num&(num-1); i++; } System.out.println(i); 按位或( | ) ---- 同0为0,否则为1

1. 任何数和0按位或都是自身

System.out.println(88453413|0); 88453413 按位异或( ^ ) ---- 相同为0,不同为1

1. 自身与自身按位异或结果都为0

System.out.println(5^5); 0

2. 任何数与0异或都是自身

System.out.println(88453413|0); 88453413

3. 一个数连续与另一个数异或两次,得到自身

System.out.println(88453413^5656^5656); 88453413

4. 多个数异或结果与顺序无关

System.out.println(8^9^45); 44 System.out.println(45^9^8); 44 System.out.println(8^45^9); 44

5. 根据3和4的原理,可以交换变量

a = a ^ b; b = b ^ a; 注: b = b^a^b = b^b^a = 0^a = a 此时b已经变成了原来的a a = a ^ b a = a^b^b^a^b = a^a^b^b^b = 0^0^b = b a变成了原b 取反( ~ ) 左移( << ) ---- 左移一位的结果就是原值乘2 右移( >> ) ---- 左移一位的结果就是原值除2


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #自身按位或 #负数的二进制最高位是1 #0000 #1010取反1111 #1111