位运算及其妙用
2019-08-16 09:38:29来源:博客园 阅读 ()
位运算及其妙用
程序中的所有数在计算机内存中都是以二进制的形式储存的,即只有0和1两种数值,位运算就是直接对整数在内存中的二进制位进行。
1 <<(向左位移)
运算规则:a<<b,表示a转为二进制后左移b位,左移后,空位补0。
例:
3: 00000000 00000000 00000000 00000011
// 左移2位,空位补2个0
3<<2: 00000000 00000000 00000000 00001100
所以,3<<2 = 12
规律:a左移b位,就是a乘以2的b次方。
2 >>(向右位移)
运算规则:a>>b,表示a转为二进制后右移b位,右移后,最高位是0,则空缺位补0;最高位是1,则空缺位补1。
例:
4: 00000000 00000000 00000000 00000100
// 右移1位。右移后,最高位是0,则空缺位补0;最高位是1,则空缺位补1
4>>1: 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
5&6: 00000000 00000000 00000000 00000100
所以,5&6 = 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: 11111111 11111111 11111111 11111010 // 补码形式
11111111 11111111 11111111 11111001 // 反码
10000000 00000000 00000000 00000110 // 原码
所以,~5 = -6
位运算的一些妙用
- 在不使用第三个变量的情况下,如何交换两个变量的值?
常规操作:
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
骚操作:
void swap(int a, int b) {
a^=b;
b^=a;
a^=b;
}
- 判断奇偶
常规操作:
if (a%2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}
骚操作:
if ((a&1) == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}
- 求平均数
常规操作:
int average(int x, int y) {
return (x+y)/2;
}
骚操作:
int average(int x, int y) {
return (x&y)+((x^y)>>1);
}
原文链接:https://www.cnblogs.com/sum-41/p/11121620.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 位运算符 2020-05-26
- 【JAVA SE基础篇】10.运算符优先级与类型转换 2020-05-09
- 特殊的赋值运算符 2020-05-09
- 【JAVA SE基础篇】9.运算符的分类与内容 2020-05-09
- Java中包装类与基本类型运算的性能比较(Integer i += 1) 2020-04-26
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash