算术位移:
1.算术左移 << : 0补低位
2.算术右移 >>: 正数0补高位,负数1补高位
逻辑位移:
逻辑右移>>>: 不管正负,右移时都是0补高位
测试代码:
// 测试算数左位移 *** 作
int Movednum = 10;
System.out.println("Movednum = " + Integer.toBinaryString(Movednum));
Movednum >>= 3;
System.out.println("Movednum = " + Integer.toBinaryString(Movednum));
Movednum >>= 31;
System.out.println("Movednum = " + Integer.toBinaryString(Movednum));
int Movednum2 = Integer.MAX_VALUE;
System.out.println("Movednum2 = " + Integer.toBinaryString(Movednum2));
Movednum2 >>= 31;
System.out.println("Movednum2 = " + Integer.toBinaryString(Movednum2));
System.out.println("测试负数算术移位");
int Movednum3 = -10;
System.out.println("Movednum3 = " + Integer.toBinaryString(Movednum3));
Movednum3 >>= 3;
System.out.println("Movednum3 = " + Integer.toBinaryString(Movednum3));
Movednum3 >>= 32; // 溢出 —— 返回本身值
System.out.println("Movednum3 = " + Integer.toBinaryString(Movednum3));
int Movednum4 = Integer.MIN_VALUE;
System.out.println("Movednum4 = " + Integer.toBinaryString(Movednum4));
Movednum4 >>= 31;
System.out.println("Movednum4 = " + Integer.toBinaryString(Movednum4));
System.out.println("测试无符号右移");
// 测试无符号右移
int Movednum5 = -10;
System.out.println("Movednum5 = " + Integer.toBinaryString(Movednum5));
Movednum5 >>>= 3;
System.out.println("Movednum5 = " + Integer.toBinaryString(Movednum5));
System.out.println("测试左移");
int Movednum6 = -10;
System.out.println("Movednum6 = " + Integer.toBinaryString(Movednum6));
Movednum6 <<= 3;
System.out.println("Movednum6 = " + Integer.toBinaryString(Movednum6));
作为一个计算机专业的学生,看见位运算就想吐,觉得自己也是没救了
1. JAVA中的异或运算异或运算 ^:异或(xor)是一个数学运算符,它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为: 如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
例题:
题目描述:求某十进制整数的反码
反码定义:二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1。例如,二进制数 “101” 的二进制反码为 “010”。
思路:利用异或运算的特点,我们只需要将最高位的1以及其之后的每位都异或1,即可得到十进制整数的反码。
图解
代码
public int bitwiseComplement(int n) {
if(n == 0){
return 1;
}
int bit = 0;
// 找到最高位的1的前一位记录为bit
for(int i=0; i<=30; i++){
if(n < (1<<i)){
bit = i;
System.out.println("bit = " + bit);
break;
}
}
return n ^ ((1 << bit) - 1);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)