1.与(&)、或(|)、非(~)、异或(^)
/**
* 测试
**/
public class Test {
public static void main(String args[]) {
int a = 55;
int b = 65;
System.out.println("a==" + Integer.toBinaryString(a));
System.out.println("b==" + Integer.toBinaryString(b));
//两个是 1 结果就是 1 否则是 0
System.out.println("a&b==" + Integer.toBinaryString(a&b));
System.out.println("a&b=" + (a&b));
//一个是 1 结果就是 1 否则是 0
System.out.println("a|b==" + Integer.toBinaryString(a|b));
System.out.println("a|b=" + (a|b));
//相互取反 1->0 0->1
System.out.println("~a==" + Integer.toBinaryString(~a));
System.out.println("~a=" + (~a));
//两数相同是 0 不同是 1
System.out.println("a^b==" + Integer.toBinaryString(a^b));
System.out.println("a^b=" + (a^b));
}
}
//测试打印
a==110111
b==1000001
a&b==1
a&b=1
a|b==1110111
a|b=119
~a==11111111111111111111111111001000
~a=-56
a^b==1110110
a^b=118
2.移位运算符
移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数。
2.1 <<:左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0)。
2.2 >>:"有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1。
2.3 >>>: "无符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0。
public class Test {
public static void main(String args[]) {
int c = 3241;
System.out.println("c = "+Integer.toBinaryString(c));
System.out.println("-c = "+Integer.toBinaryString(-c));
//如果值为正,则在高位补0,如果值为负,则在高位补1
System.out.println("c >> 5 = "+Integer.toBinaryString(c >> 5));
System.out.println("-c >> 5 ="+Integer.toBinaryString(-c >> 5));
//无论值的正负,都在高位补0
System.out.println("c >>> 5 = "+Integer.toBinaryString(c >>> 5));
System.out.println("-c >>> 5 = "+Integer.toBinaryString(-c >>> 5));
//低位补0
System.out.println("c << 5 = "+Integer.toBinaryString(c << 5));
System.out.println("-c << 5 = "+Integer.toBinaryString(-c << 5));
}
}
//测试打印
c = 110010101001
-c = 11111111111111111111001101010111
c >> 5 = 1100101
-c >> 5 =11111111111111111111111110011010
c >>> 5 = 1100101
-c >>> 5 = 111111111111111111110011010
c << 5 = 11001010100100000
-c << 5 = 11111111111111100110101011100000
3.运算技巧
负整数 转换成 二进制
如:-43
先求出 43 的二进制:101011
求出43的反码:010100
求出43的补码,补码就是反码+1:010101
补码就是负数在计算机中的二进制表示方法。
所以 -43的二进制就是:1111 1111 1111 1111 1111 1111 1101 0101
二进制负数 转换成 十进制
如:1111 1111 1111 1111 1111 1111 1101 0101
因为是负数所以开头肯定是 1
和上面的计算是相反的,那么就是先做 -1 :1111 1111 1111 1111 1111 1111 1101 0100
然后取反:0000 0000 0000 0000 0000 0000 0010 1011
也就是:101011
也就是正数 43 加上负号就是 -43
!!!!!
为什么要复习这个,因为最近在学习数据结构和算法,比如hasmap,里面有很多的运算符运算,好多都不记得了,所以复习一下。