JAVA位运算

来源:互联网 发布:app提示网络连接失败 编辑:程序博客网 时间:2024/05/16 11:32

JAVA位操作符分为两种

1.两个二进制数比较,返回一个新的二进制数

语法:
数值 运算符 数值 ,返回基本数值类型
运算符 内容 &(并) 位与位比较,都是1该位才返回1,否则该位返回0 |(或) 位与位比较,只有有一个是1该位就返回1,没1该位返回0 ^(异或) 位与位比较,相同该位返回0,不同该位返回1
例子:
十进制 二进制(32位显示) 结果转十进制 20 00000000000000000000000000010100 10 00000000000000000000000000001010 20 & 10 00000000000000000000000000000000 0 20 | 10 00000000000000000000000000011110 30 20 ^ 10 00000000000000000000000000011110 30
注意:
虽然是比较,但返回的结果是数值类型,不是boolean;像 int & int 返回的是int,long & int 返回的是long

2.单个二进制数转换,返回一个新的二进制数

  • 语法:数值 运算符 移多少位,返回基本数值类型
运算符 内容 ~(非) 把每一位的0变成1,1变成0 <<(左移) 把所有位整体向左移动多少位,右边补0 >>(右移) 把所有位整体向右移动多少位,左边补符号位(即最高位) >>>(无符号右移) 把所有位整体向右移动1位,左边补0
例子:
  • 左移右边补0
十进制 二进制(32位显示) 结果转十进制 20 00000000000000000000000000010100 20 << 1 00000000000000000000000000101000 40 -20 11111111111111111111111111101100 -20 << 1 11111111111111111111111111011000 -40
  • 右移左边补符号位(最高位),结果转为有符号的十进制整数
十进制 二进制(32位显示) 结果转十进制 20 00000000000000000000000000010100 20 >> 1 00000000000000000000000000001010 10 20 >> 2 00000000000000000000000000000101 5 -20 11111111111111111111111111101100 -20 >> 1 11111111111111111111111111110110 -10 -20 >> 2 11111111111111111111111111111011 -5
  • 无符号右移左边补0,结果直接转为十进制
十进制 二进制(32位显示) 结果转十进制 20 00000000000000000000000000010100 20 >>> 1 00000000000000000000000000001010 10 20 >>> 2 00000000000000000000000000000101 5 -20 11111111111111111111111111101100 -20 >>> 1 01111111111111111111111111110110 2147483638 -20 >>> 2 00111111111111111111111111111011 1073741819

重点解释

  • 符号位(最高位)
    符号位即数值的最高位,即左边第一位。正数的符号位为0,负数的符号位为1。其余各位用来表示数值的大小。
  • 负数的二进制
    负数的二进制即将原来的二进制数的每一位0转为1,1转为0;得到的结果+1;然后前面的每一位都补1;