精华笔记:
-
什么是二进制:逢2进1的计数规则。计算机中的变量/常量都是按照2进制来计算的
- 2进制:
- 规则:逢2进1
- 数字:0 1
- 基数:2
- 权:128 64 32 16 8 4 2 1
- 如何将2进制转换为10进制:
- 正数:将二进制每个1位置的权相加
- 2进制:
-
十六进制:逢16进1的计数规则
-
16进制:
- 规则:逢16进1
- 数字:0 1 2 3 4 5 6 7 8 9 a b c d e f
- 基数:16
- 权:4096 256 16 1
-
用途:因为2进制书写太麻烦,所以常常用16进制来缩写2进制
-
如何缩写:将2进制从低位开始,每4位2进制缩为1位16进制
权: 8 4 2 1 2进制: 0001 1011 1110 1010 0101 16进制: 1 b e a 5------------0x1bea5 权: 8 4 2 1 2进制: 0010 1111 1101 0100 0111 1011 16进制: 2 f d 4 7 b-------0x2fd47b 权: 8 4 2 1 2进制: 0010 1001 0101 1010 1011 1001 16进制: 2 9 5 a b 9-------0x295ab9
-
-
补码:-------------------了解
-
计算机处理有符号数(正负数)的一种编码方式
-
以4位2进制为例讲解补码的编码规则:
- 计算机的时候如果超出4位则高位自动溢出舍弃,保持4位不变
- 将4位2进制数分一半作为负数
- 最高位称为符号位,高位为1是负数,高位为0是正数
-
规律数:
- 0111为4位补码的最大值,规律是1个0和3个1,可以推导出
- 32位补码的最大值:1个0和31个1---------(01111111111111111111111111111111)
- 1000为4位补码的最小值,规律是1个1和3个0,可以推导出
- 32位补码的最小值:1个1和31个0---------(10000000000000000000000000000000)
- 1111为4位补码的-1,规律是4个1,可以推导出
- 32位补码的-1:32个1--------------------------(11111111111111111111111111111111)
- 0111为4位补码的最大值,规律是1个0和3个1,可以推导出
-
深入理解负值:
-
记住32位2进制数的-1的编码:32个1
-
负值:用-1减去0位置的权
1)11111111111111111111111111111111 = -1 2)11111111111111111111111111111101 = -1-2 = -3 3)11111111111111111111111111111010 = -1-1-4 = -6 4)11111111111111111111111111110111 = -1-8 = -9 5)11111111111111111111111111110101 = -1-2-8 = -11 6)11111111111111111111111111010011 = -1-4-8-32= -45
-
-
笔记:
-
什么是二进制:逢2进1的计数规则。计算机中的变量/常量都是按照2进制来计算的
-
2进制:
- 规则:逢2进1
- 数字:0 1
- 基数:2
- 权:128 64 32 16 8 4 2 1
-
如何将2进制转换为10进制:
- 正数:将二进制每个1位置的权相加
public class BinaryDemo { public static void main(String[] args) { int n = 45; //编译时会被编译为: 101101 System.out.println(Integer.toBinaryString(n)); //101101,以2进制输出 System.out.println(n); //45,以10进制输出 n++; //将101101增1----101110 System.out.println(Integer.toBinaryString(n)); //101110,以2进制输出 System.out.println(n); //46,以10进制输出 } }
-
-
十六进制:逢16进1的计数规则
-
16进制:
- 规则:逢16进1
- 数字:0 1 2 3 4 5 6 7 8 9 a b c d e f
- 基数:16
- 权:4096 256 16 1
-
用途:因为2进制书写太麻烦,所以常常用16进制来缩写2进制
-
如何缩写:将2进制从低位开始,每4位2进制缩为1位16进制
权: 8 4 2 1 2进制: 0001 1011 1110 1010 0101 16进制: 1 b e a 5------------0x1bea5 权: 8 4 2 1 2进制: 0010 1111 1101 0100 0111 1011 16进制: 2 f d 4 7 b-------0x2fd47b 权: 8 4 2 1 2进制: 0010 1001 0101 1010 1011 1001 16进制: 2 9 5 a b 9-------0x295ab9
public class HexDemo { public static void main(String[] args) { /* 16进制:缩写2进制 1)0x为16进制字面量前缀 2)0b为2进制字面量前缀,可以加下划线---一般不用,一般都是16进制缩写 3)计算机内部没有10进制,也没有16进制,只有2进制 4)Integer.toHexString()可以将16进制数返回 显示16进制:System.out.println(Integer.toHexString(n)); */ /* int n = 0x2fd47b; //0x表示16进制 int m = 0b10_1111_1101_0100_0111_1011; //0b表示2进制 System.out.println(Integer.toBinaryString(n)); //按2进制输出 System.out.println(Integer.toBinaryString(m)); System.out.println(Integer.toHexString(n)); //按16进制输出 System.out.println(Integer.toHexString(m)); System.out.println(n); //按10进制输出 System.out.println(m); */ /* 8进制: 以0开头------------平时不用 1)规则:逢8进1 2)数字:0 1 2 3 4 5 6 7 3)基数:8 4)权:512 64 8 1 */ int a = 067; //以0开头的表示8进制 System.out.println(a); //55(6个8+7个1) /* 小面试题: int a = 068; 正确吗? 答:编译错误,因为0开头的表示8进制,8进制最大数字为7 */ } }
-
-
补码:-------------------了解
-
计算机处理有符号数(正负数)的一种编码方式
-
以4位2进制为例讲解补码的编码规则:
- 计算机的时候如果超出4位则高位自动溢出舍弃,保持4位不变
- 将4位2进制数分一半作为负数
- 最高位称为符号位,高位为1是负数,高位为0是正数
-
规律数:
- 0111为4位补码的最大值,规律是1个0和3个1,可以推导出
- 32位补码的最大值:1个0和31个1---------(01111111111111111111111111111111)
- 1000为4位补码的最小值,规律是1个1和3个0,可以推导出
- 32位补码的最小值:1个1和31个0---------(10000000000000000000000000000000)
- 1111为4位补码的-1,规律是4个1,可以推导出
- 32位补码的-1:32个1--------------------------(11111111111111111111111111111111)
- 0111为4位补码的最大值,规律是1个0和3个1,可以推导出
-
深入理解负值:
-
记住32位2进制数的-1的编码:32个1
-
负值:用-1减去0位置的权
1)11111111111111111111111111111111 = -1 2)11111111111111111111111111111101 = -1-2 = -3 3)11111111111111111111111111111010 = -1-1-4 = -6 4)11111111111111111111111111110111 = -1-8 = -9 5)11111111111111111111111111110101 = -1-2-8 = -11 6)11111111111111111111111111010011 = -1-4-8-32= -45
public class ComplementDemo { public static void main(String[] args) { /* //规律数: int max = Integer.MAX_VALUE; //int的最大值 int min = Integer.MIN_VALUE; //int的最小值 System.out.println(Integer.toBinaryString(max)); //0111111... System.out.println(Integer.toBinaryString(min)); //1000000... System.out.println(Integer.toBinaryString(-1)); //111111... */ int n = -45; System.out.println(Integer.toBinaryString(n)); //2进制显示 System.out.println(n); //10进制显示 } }
-
-