首页 > 编程知识 正文

负数的位运算(牙膏的妙用)

时间:2023-05-04 11:40:18 阅读:103226 作者:2352

程序中的所有数字都是以二进制形式存储在计算机内存中,即只有0和1两个数值,位操作是直接执行内存中整数的二进制位。

1(向左偏移)

运算规则:ab,意思是A转换成二进制后向左移位B位,左移后的空格用0填充。

示例:

3: 00000000 00000000 00000000 00000011

//向左移动2位,并在空白处填入2个零。

32: 00000000 00000000 00000000 00001100

所以,32=12

规则:A向左移动B,即A乘以B的2次方。

2(向右移动)

操作规则:ab,意思是A转换成二进制后向右移动B位。向右移位后,如果最高位为0,则空位填充为0;如果最高位为1,则空位用1填充。

示例:

4: 00000000 00000000 00000000 00000100

//向右移动1位。向右移动后,最高位为0,则空位填充为0;如果最高位为1,则空位用1填充。

41 00000000 00000000 00000000 00000010

所以,4 1=2

规则:A向右移动到B,即A除以2等于B的幂。

3(与运算)

操作规则:如果同一位的两位都是1,则为1;如果一个不是1,它就是0。

示例:

5: 00000000 00000000 00000000 00000101

6: 00000000 00000000 00000000 00000110

56: 00000000 00000000 00000000 00000100

所以,56=4

4|(或操作)

操作规则:只要其中一个相同的位是1,它就是1。

示例:

5: 00000000 00000000 00000000 00000101

6: 00000000 00000000 00000000 00000110

5|6: 00000000 00000000 00000000 00000111

所以,5|6=7

5(异或运算)

操作规则:对于二进制位,如果一位不同,则该位为1;否则,该位为0。

示例:

5: 00000000 00000000 00000000 00000101

6: 00000000 00000000 00000000 00000110

5^6: 00000000 00000000 00000000 00000011

因此,5 6=3

6~(反向操作)

操作规则:将二进制数字反相,即1变成0,0变成1。

示例:

5: 00000000 00000000 00000000 00000101

~ 5: 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

11111111111111111111111111111111111111111111111111111111111111111111001//反码

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

所以,~5=-6

位操作的一些神奇效果

如何在不使用第三个变量的情况下交换两个变量的值?常规操作:

void swap(int a,int b){ 0

int temp=a;

a=b;

b=温度;

}

骚操作:

void swap(int a,int b){ 0

a^=b;

b^=a;

a^=b;

}

判断奇偶的一般操作:

if(a % 2==0){ 0

System.out.println('偶数');

} else {

System.out.println('奇数');

}

骚操作:

if((a1)==0){ 0

System.out.println('偶数');

} else {

System.out.println('奇数');

}

平均常规操作:

int average(int x,int y){ 0

return(x y)/2;

}

骚操作:

int average(int x,int y){ 0

返回(xy)((x^y)1);

}

推荐阅读:

浅谈Java中的命名规范

本文向您介绍Java8中接口的默认方法。

深刻理解Java中方法的参数传递机制。

阿里开发者招聘节| 2019阿里巴巴技术面试问题集锦

你可能不知道的是自动包装和拆封。

抽象类和模板方法模式

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。