欢迎大家来到IT世界,在知识的湖畔探索吧!
运算符分类:
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运运算符
- 三目运算符
位运算运算符
注意:要做位运算,首先要把数据转换为二进制 (使用的是补码) 位运算符: &(有0则0) , | (有1则1) , ^(相同则0,不同则1) , ~(0变1,1变0) , <<(左移) , >>(右移) , >>>(无符号)
欢迎大家来到IT世界,在知识的湖畔探索吧!
位运算例子
欢迎大家来到IT世界,在知识的湖畔探索吧!class YunSuan{ public static void main(String[] args){ int a = 3; int b = 4; System.out.println(3 & 4);//输出结果0 System.out.println(3 | 4);//输出结果7 System.out.println(3 ^ 4);//输出结果7 System.out.println( ~3);//输出结果-4 /* 分析: 3的二进制 00000000 00000000 00000000 00000011 4的二进制 00000000 00000000 00000000 00000100 &位运算:有0则0. 00000000 00000000 00000000 00000011 &00000000 00000000 00000000 00000100 ------------------------------------- 00000000 00000000 00000000 00000000 结果是:0 |位运算:有1则1 00000000 00000000 00000000 00000011 |00000000 00000000 00000000 00000100 ------------------------------------- 00000000 00000000 00000000 00000111 结果是:7 ^位运算符:相同则0,不同则1 00000000 00000000 00000000 00000011 ^00000000 00000000 00000000 00000100 ------------------------------------- 00000000 00000000 00000000 00000111 结果是:7 ~位运算:0变1,1变0 00000000 00000000 00000000 00000011 ~ 补码: 反码: 原码: 00000000 00000000 00000100 结果是:-4 */ } }
^位的特点:一个数据对另一个数据异或(^)两次,该数据本身不变 例子: class YunSuan{ public static void main(String[] args){ int a = 10; int b = 20; System.out.println( a ^ b ^ b );// 10 System.out.println( a ^ b ^ a );// 20 } }
欢迎大家来到IT世界,在知识的湖畔探索吧! <<:左移 左边最高位丢弃,右边补齐0 >>:右移 最高位是0,左边补1 最高为位是1左边补1 >>>无符号:无论最高位是0还是1,左边补齐0 例子: class YunSuan{ public static void main(String[] args){ //<
<把<<左边的数据*2的移动次幂 System.out.println(="" 3="" <<="" 2="" );="" 输出结果:3*2^2="12" />> 同理把>>左边的数据除以2的移动次幂 System.out.println(24 >> 2);//输出结果:24/2^2=6 System.out.prinyln(-24 >> 2);//输出结果:-24/2^2=-6 System.out.println(-24 >>> 2);//输出结果: /* ( 3 << 2 )意思:计算出三的二进制,再向左移动两位丢弃,右边补0,<
<的移动 计算出3的二进制="" 00000000="" 00000011="" (00)00000000="" 00001100="">
>的移动 计算-24的二进制: 原码: 00000000 00000000 00011000 反码: 补码: (00) 补码: (00) 反码: 原码: 00000000 00000000 000110 >>>的移动 计算-24的二进制: 原码: 00000000 00000000 00011000 反码: 补码: 00 (00) 补码:00 (00) 反码:00 (00) 原码:00 (00) 结果: */ } }
的移动>
例题:
- 请自己实现两个数的变量交换 。
- 请用最有效率的方式计算出2乘以8的结果?
例题一解决方法:
class yunsuan{ public static void main(String[] args){ int a = 10; int b = 20; System.out.println("a:"+a) System.out.println("b:"+b) 方法一:使用第三变量 int c = a; a = b; b = c; System.out.println("a:"+a) System.out.println("b:"+b) //输出结果:a:20 b:10 方法二:用位异或运算 a=a^b; b=a^b;//a^b等于a^b^b=a a=a^b;//a^b等于a^b^a=b 方法三: a=a+b;//a=30 b=a-b;//b=10 a=a-b;//a=20 方法四:一句话搞定 b=(a+b) - (a=b);//b=30-20=10 a=20 System } }
例题二解决方法:
欢迎大家来到IT世界,在知识的湖畔探索吧!class YunSuan{ public static void main(String[] args){ System.out.println(2*8); System.out.println(2 << 3); } }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/90715.html