Java中的位运算符
2021-06-17 16:04
标签:color 应该 溢出 strong span 基础 str 异或 语法 Java提供的位运算符有:左移( > ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符。 PS:所有的位运算操作都是基于二进制补码进行的,干开发的都应该知道相关知识吧,我就不多哔哔。 在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。 语法格式 需要移位的数字
例如: 首先把10转换为二进制数字0000 0000 0000 0000 0000 0000 0000 1010,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0010 1000,则转换为十进制是80. 数学意义 按二进制形式把所有的数字向右移动对应val位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1. ‘>>‘位操作符(10 >> 3):1 10的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1010,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0001.转换为十进制是1.即:10/2^3 取整 1 按二进制形式把所有的数字向右移动对应val位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。 对-10右移三位的过程为:舍弃二进制数的最后三位,在二进制数的开头增加三个0,导致原来的符号位由‘1’变成了‘0’,由负数变成了正数; -10的二进制原码: 1000 0000 0000 0000 0000 0000 0000 1010, 反码:1111 1111 1111 1111 1111 1111 1111 0101 补码:1111 1111 1111 1111 1111 1111 1111 0110 补码右移三位后 ?0001 1111 1111 1111 1111 1111 1111 1110,转换成十进制 536870910 与运算时,进行运算的两个数,从最低位到最高位,一一对应。如果某 bit 的两个数值对应的值都是 1,则结果值相应的 bit 就是 1,否则为 0. 与运算时,进行运算的两个数,从最低位到最高位,一一对应。如果某 bit 的两个数值对应的值只要 1 个为 1,则结果值相应的 bit 就是 1,否则为 0。 对操作数的每一位进行操作,1 变成 0,0 变成 1。 10的二进制原码 0000 0000 0000 0000 0000 0000 0000 1010 反码,补码 同 ~取反操作后:1111 1111 1111 1111 1111 1111 1111 1111 0101 补码 反码: 1111 1111 1111 1111 1111 1111 1111 1111 0100 原码:1000 0000 0000 0000 0000 0000 0000 1011 即 -11 个人猜想:N进行取反操作的结果是不是 -N-1???? 两个操作数进行异或时,对于同一位上,如果数值相同则为 0,数值不同则为 1。 相信从这个例子,你们也应该看明白异或操作的规律了吧。 二进制运算符,包括位运算符和移位运算符,使程序员可以在二进制基础上操作数字,可以更有效的进行运算,并且可以以二进制的形式存储和转换数据,是实现网络协议解析以及加密等算法的基础。 Java中的位运算符 标签:color 应该 溢出 strong span 基础 str 异或 语法 原文地址:https://www.cnblogs.com/JackpotHan/p/9719133.html
System.out.println("‘));
----------
输出结果
80
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。 即:10*2^3=80 >>(右移)
语法格式 需要移位的数字 >> 移位的次数
例如System.out.println("‘>>‘位操作符(10 >> 3):" + (10 >> 3));
System.out.println("‘>>‘位操作符(-10 >> 3):" + (-10 >> 3));
---------- 输出结果
‘>>‘位操作符(-10 >> 3):-2
数学意义 右移一位相当于除2,右移n位相当于除以2的n次方。>>>(无符号右移)
System.out.println("‘>>>‘位操作符(-10 >>> 3):" + (-10 >>> 3));
System.out.println("‘>>>‘位操作符(10 >>> 3):" + (10 >>> 3));
------------ 输出结果:
‘>>>‘位操作符(-10 >>> 3):536870910
‘>>>‘位操作符(10 >>> 3):1& (与运算符)
0 & 0 = 0,
0 & 1 = 0,
1 & 1 = 1
System.out.println("‘&‘位操作符(10 & 3):" + (10 & 3));
---------
输出结果:
‘&‘位操作符(10 & 3):2
|(或运算符)
0 | 0 = 0,
0 | 1 = 1,
1 | 1 = 1
System.out.println("‘|‘位操作符(10 | 3):" + (10 | 3));
----------
输出结果:
‘|‘位操作符(10 | 3):11~ (取反运算符)
System.out.println("‘~‘位操作符(~ 10):" + (~10));
System.out.println("‘~‘位操作符(~ -10):" + (~-10));
----------
输出结果:
‘~‘位操作符(~ 10):-11
‘~‘位操作符(~ -10):9^ (异或运算符)
System.out.println("‘^‘位操作符(10^3):"+(10^3));
System.out.println("‘^‘位操作符(9^3):"+(9^3));
System.out.println("‘^‘位操作符(9^10):"+(9^10));
-------------
输出结果:
‘^‘位操作符(10^3):9
‘^‘位操作符(9^3):10
‘^‘位操作符(9^10):3
小结
下一篇:python内置函数