原码、反码、补码

92 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情

原码、反码、补码

(1)原码

1)原码就是将一个整数转换成它的二进制形式。

2)原码的第一位表示的是符号位,正数为 0,负数为 1.

如: int a = 4;其原码为:00000000 00000000 00000000 00000100

int b = -12; 其原码为:10000000 00000000 00000000 00001100

3)正数的原码、补码、反码一样。

(2)反码

1)负数的反码为 其原码符号位不变,其他的数值为取反。0 => 1 , 1 => 0

2)例如:int c = -15;

其原码为:10000000 00000000 00000000 00001111

其反码为原码符号位不变,其余位置取反:11111111 11111111 11111111 11110000

3)正数的原码、补码、反码一样。

(3)补码

1)负数的补码为 其反码+1。

2)例如:int d = -9

其原码为:10000000 00000000 00000000 00001001

其反码为:11111111 11111111 11111111 11110110

其补码为:11111111 11111111 11111111 11110111

3)正数的原码、补码、反码一样。

(4)细节

1)计算机在运算的时候,都是以补码的形式运算的。

2)0的反码和补码都是0.

3)当我们看运行结果时,要看它的原码。

二、位运算

(1)位运算符分类

位运算符总共分为七类,都包括:& 、| 、^ 、~ 、>> 、<< 、>>>

(2)位运算符作用

1)按位与&:符号两边的运算结果全为1结果为1,否则为0。

2)按位或|:符号两边的运算结果有一个为1结果就为1,否则为0。

3)按位异或^:符号两边的运算结果一个为1一个为0结果就为1,否则为0。

4)按位取反~:符号两边的运算结果取反,1 => 0 , 0 => 1。

5)算数右移>>:低位溢出,符号位不改变,并且用符号位补溢出的高位。

6)算数左移>>:符号位不变,低位补零。

7)无符号右移(逻辑右移):低位溢出,高位补0。

(3)位运算符演示

10 & 2 = 1; 
0 & 100 = 0;
 
1 | 0 = 1;
0 | 0 = 0;
 
20 ^ 0 = 1;
23 ^ 11 = 0;
 
~-3 = 0;
~0 = 1;
 
int a=1>>2; //1 => 00000001 => 00000000
int c=1<<2; //1 => 00000001 => 00000100

动态初始化

 
public class TwoDimensionalArray {
	public static void main(String[] args) {
 
		/*
		 动态创建下面二维数组,并输出
		 i = 0: 1
		 i = 1: 2 2
		 i = 2: 3 3 3
		 一共有三个一维数组,每个一维数组元素不一样
		 */
		
		int[][] arr = new int[3][]; // 创建 二维数组
 
		for(int i =0 ; i < arr.length ; i++) {
			// 给每一个一维数组开空间 new
			//  如果没有给一维数组 new 开空间,那么 arr[i] 就是 null
			arr[i] = new int[i + 1];
 
			for(int j = 0 ; j < arr[i].length ; j++) {
 
				arr[i][j] = i + 1;
			}
		}
		for(int i = 0; i < arr.length ; i++) {
			for(int j = 0; j < arr[i].length; j++) {
 
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
		
	}
}