|
🎥屿小夏:个人主页🔥个人专栏:Java编程秘籍🌄莫道桑榆晚,为霞尚满天!文章目录📑前言一、位运算符1.1按位与&1.2按位或|1.3按位取反~1.4按位异或^二、移位运算符1.1左移<<1.2>>1.3无符号右移>>>🌤️全篇总结📑前言位运算符是Java中的重要运算符之一,用于对数据的二进制位进行操作。Java中的位运算符包括按位与(&)、按位或(|)、按位取反(~)和按位异或(^)。这些运算符可以帮助我们进行位级操作,对于某些特定的问题解决方案非常有用。本文将深入探讨Java中的位运算符的用法、规则以及注意事项,帮助读者更好地理解和应用这些运算符。一、位运算符java中数据存储的最小单位是字节,而数据操作的最小单位是比特位.字节是最小的存储单位,每个字节是由8个二进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。位运算符主要有四个:&|~^,除~是一元运算符外,其余都是二元运算符。位操作表示按二进制位运算.计算机中都是使用二进制来表示数据的(01构成的序列),按位运算就是在按照二进制位的每一位依次进行计算。1.1按位与&按位与运算符(&)会对两个整数的每一位进行比较。只有当两个相应的位都是1时,结果中的该位才会是1,否则为0。这个操作常用于屏蔽某些位或检查特定位是否设置。inta=10;intb=20;System.out.println(a&b);123进行按位运算,需要先把10和20转成二进制,分别为1010和101001.2按位或|如果两个二进制位都是0,则结果为0,否则结果为1inta=10;intb=20;System.out.println(a|b);123运算方式和按位于类似注意:当&和|的操作数为整数(int,short,long,byte)的时候,表示按位运算,当操作数为boolean的时候,表示逻辑运算。1.3按位取反~如果该二进制位为0则转为1,如果该二进制位为1则转为0inta=0xf;System.out.printf("%x\n",~a)//fffffff0123注意:0x前缀的数字为十六进制数字.十六进制可以看成是二进制的简化表示方式.一个十六进制数字对应4个二进制位0xf表示10进制的15,也就是二进制的1111printf能够格式化输出内容,%x表示按照十六进制输出\n表示换行符1.4按位异或^按位异或运算符(^)会对两个整数的每一位进行比较。如果两个相应的位相同(都是0或都是1),则结果中的该位为0;如果两个位不同,则结果为1。inta=0x1;intb=0x2;System.out.printf("%x\n",a^b);123注意:如果两个数相同,则异或的结果为0二、移位运算符移位运算符有三个:<< >>>>>,都是二元运算符,且都是按照二进制比特位来运算的。1.1左移<<
最左侧位不要了, 最右侧补 0
int a = 0x10;
System.out.printf("%x\n", a << 1);
// 运行结果(注意, 是按十六进制打印的)
20
1234
注意:向左移位时,丢弃的是符号位,因此正数左移可能会变成负数
1.2 右移>>最右侧位不要了,最左侧补符号位(正数补0,负数补1)inta=0x10;System.out.printf("%x\n",a>>1);//运行结果(注意,是按十六进制打印的)8intb=0xffff0000;System.out.printf("%x\n",b>>1);//运行结果(注意,是按十六进制打印的)ffff8000123456781.3无符号右移>>>最右侧位不要了,最左侧补0inta=0xffffffff;System.out.printf("%x\n",a>>>1);//运行结果(注意,是按十六进制打印的)7fffffff1234注意:左移1位,相当于原数字*2.左移N位,相当于原数字*2的N次方.右移1位,相当于原数字/2.右移N位,相当于原数字/2的N次方.由于计算机计算移位效率高于计算乘除,当某个代码正好乘除2的N次方的时候可以用移位运算代替.移动负数位或者移位位数过大都没有意义🌤️全篇总结本篇详细介绍了Java中的位运算符。位运算符包括按位与(&)、按位或(|)、按位取反(~)和按位异或(^),它们用于对数据的二进制位进行操作。通过位运算符,我们可以进行屏蔽位、检查位状态等处理,频繁出现在底层编程、位运算加密等场景中。在使用这些运算符时,需要理解它们的运算规则,注意正负数的影响以及运算符的优先级。通过合理运用这些运算符,能够提高代码的效率和性能,同时也解决一些特定问题。
|
|