按位运算符
定义:按位运算符是来操作整数基本数据类型中的单个“比特”(bit),即二进制位,位运算符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。
分类:与(&)、或(|)、异或(^)、非(~)
1、与运算
定义:都为1才得到1,其它情况得到0
如:5&4
二进制:0101 & 0100 = 0100 0100对应十进制4
2、或运算
定义:两个数有一个为1,则得到1
如:5|4
二进制:0101 & 0100 = 0101 0101对应十进制5
3、异或运算
定义:两个数不同则得到1
如:5^4
二进制:0101 ^ 0100 = 0001 0001对应十进制1
4、非运算
定义:取反(需要考虑 符号位)
如:~5
二进制:~0000 0000 0000 0101 = 1111 1111 1111 1010 1111 1111 1111 1010对应十进制-6
顺便说下:符号位在最高1位,符号位为0表示正数,为1表示负数
移位运算符
1、左移运算符
定义:运算符左边数据的二进制位依次往左移动n位(n为运算符右边的十进制值),末尾(此时末尾为二进制最右边)用0补位。
说明:左移只考虑末尾位,不管正负数,都不影响符号位,因此不分有无符号位运算
如:4830 << 5 (4830的二进制位左移5位)
结果:
总结:x << y 相当于 x*2y
2、带符号右移运算符
定义:运算符左边数据的二进制位依次往右边移动n位(n为运算符右边的十进制值),末尾(此时末尾为二进制位最左边)用0或者1(正数用0,负数用1)补位。
正数
如:4830 >> 5
结果:
正数用0补位,输出时应为0000010010110(输出省略前面0)
负数
如:-4830 >> 5
结果:
总结:x << y 相当于 x/2y
3、不带符号右移运算符
定义:运算符左边数据的二进制位依次往右边移动n位(n为运算符右边的十进制值),末尾(此时末尾为二进制位最左边)用0补位。
说明:负数在此没有算数意义,因为只补0,
如:-4830 >>> 5
结果: