1.输入一个数字,显示数字在机器中的32位二进制存储结构
/**
* 打印方法
* @param number 入参
*/
private static void print(int number) {
for (int i = 31; i >= 0; i--) {
System.out.print((number & (1 << i)) == 0 ? "0" : "1");
}
System.out.println();
}
2.显示一个数的正32位和负的32位二进制
public static void main(String[] args) {
System.out.println("+++++++++++++++++++++++ 位运算 ++++++++++++++++++++++++++++");
System.out.println("1.正数的32位进制及取反:");
int num = 325;
print(num);
int num2 = -num;
print(num2);
int num3 = (~num + 1);
print(num3);
System.out.println("2.负数的32位进制及取反:");
int var = -10;
print(var);
int var1 = -var;
print(var1);
int var2 = (~var + 1);
print(var2);
System.out.println("总结:");
System.out.println("1.最高位为符号位,0代表正数,1代表负数");
System.out.println("2.不管是正数还是负数取相反数,二进制都是取相反数加1");
}
3.符号位,左移:<< 右移:>> 无符号右移:>>>
/**
* 符号位:
* 左移:<<
* 右移:>>
* 无符号右移:>>>
*/
private static void test2() {
System.out.println("++++++++++++++++++++ 位运算 ++++++++++++++++++++++++++++");
System.out.println("1.右移:");
int number = 8;
// 原始值
print(number);
// 右移1位
print(number << 1);
// 右移2位
print(number << 2);
System.out.println("2.左移:");
int var = 8;
// 原始值
print(var);
// 左移1位
print(var >> 1);
// 左移2位
print(var >> 2);
System.out.println("3.左移,右移,无符号右移:");
int var1 = -8;
print(var1);
print(var1 << 1);
print(var1 >> 1);
print(var1 >>> 1);
}
运行结果:
+++++++++++++++++++++++ 位运算 ++++++++++++++++++++++++++++
1.右移:
00000000000000000000000000001000
00000000000000000000000000010000
00000000000000000000000000100000
2.左移:
00000000000000000000000000001000
00000000000000000000000000000100
00000000000000000000000000000010
3.左移,右移,无符号右移:
11111111111111111111111111111000
11111111111111111111111111110000
11111111111111111111111111111100
01111111111111111111111111111100
4.总结: