1 进制
1.1 进制介绍
对于整数,有四种表示方式:
二进制: 0,1,满2进1.以0b或OB开头。
十进制: 0-9 ,满10进1。
八进制: 0-7,满8进1.以数字О开头表示。
十六进制:0-9及A(10)-F(15),满16进1.以0x或OX开头表示。此处的A-F不区分大小写
1.2 进制的图
2 进制的转换
2.1 二进制转换成十进制示例
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
案例:请将0b1011转成十进制的数
0b1011 =1*2的(1-1)次方+1 *2的(2-1)次方+0*2的(3-1)次方+1*2的(4-1)次方法=1 +2+0+8=11
2.2 八进制转换成十进制示例
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。
案例:请将0234转成十进制的数
0234= 4*8^0+ 3*8 ^1+2*8 ^2= 4 + 24+128=156
2.3 十六进制转换成十进制示例
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
案例:请将0x23A转成十进制的数
0X23A=10*16^0+3*16 ^1+2*16 ^2=10+48+512 =570
2.4 十进制转换成二进制
规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
案例:请将34 转成二进制=0B00100010
2.5 十进制转换成八进制
规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。
案例:请将131转成八进制=>0203
2.6 十进制转换成十六进制
规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。
案例:请将237转成十六进制=>OxED
2.7 二进制转换成八进制
规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
案例:请将ob11010101转成八进制
ob11(3)010(2)101(5) => 0325
2.8 二进制转换成十六进制
规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
案例:请将 ob11010101转成十六进制
ob1101(D)0101(5) = 0xD5
2.9 八进制转换成二进制
规则:将八进制数每1位,转成对应的一个3位的二进制数即可。
案例:请将0237转成二进制
02(010)3(011)7(111)=0b10011111
2.10 十六进制转换成二进制
规则:将十六进制数每1位,转成对应的4位的一个二进制数即可。
案例:请将0x23B转成二进制
Ox2(0010)3(0011)B(1011) = 0b001000111011
3 二进制在运算中的说明
1.二进 制是逢2进位的进位制,0、1是基本算符。
2.现代的电子计算机技术全部采用的是二进制,因为它只使用O、1两个数字符号,
非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。
4 原码、反码、补码(重点难点)
5 位于运算符
java 中有7个位运算(&、|、^ 、~、>>、<<和>>>)
//推导过程
//1. 先得到 2的补码 => 2的原码 00000000 00000000 00000000 00000010
// 2的补码 00000000 00000000 00000000 00000010
//2. 3的补码 3的原码 00000000 00000000 00000000 00000011
// 3的补码 00000000 00000000 00000000 00000011
//3. 按位&
// 00000000 00000000 00000000 00000010
// 00000000 00000000 00000000 00000011
// 00000000 00000000 00000000 00000010 & 运算后的补码
// 运算后的原码 也是 00000000 00000000 00000000 00000010
// 结果就是 2
System.out.println(2&3);//2
//推导
//1. 先得到 -2的原码 10000000 00000000 00000000 00000010
//2. -2的 反码 11111111 11111111 11111111 11111101
//3. -2的 补码 11111111 11111111 11111111 11111110
//4. ~-2操作 00000000 00000000 00000000 00000001运算后的补码
//5. 运算后的原码 就是 00000000 00000000 00000000 00000001 => 1
System.out.println(~-2);//1
//推导
//1. 得到2的补码 00000000 00000000 00000000 00000010
//2. ~2操作 11111111 11111111 11111111 11111101 运算后的补码
//3. 运算后的反码 11111111 11111111 11111111 11111100
//4. 运算后的原码 10000000 00000000 00000000 00000011=>-3
System.out.println(~2); //-3