开启掘金成长之旅!这是我参与「掘金日新计划 · 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();
}
}
}