1、四种进制介绍
(1)二进制:0、1,满2进1;
(2)十进制:0-9,满10进1;
(3)八进制:0-7,满8进1;
(4)十六进制:0-9及A(10)-F(15),满16进1,以0x或0X开头。
- 范例
package com.lizhi;
public class hello{
public static void main(String[] args){
// 二进制
int n1 = 0b1010;
// 十进制
int n2 = 1010;
// 八进制
int n3 = 01010;
// 十六进制
int n4 = 0x10101;
System.out.println(n1);
System.out.println(n2);
System.out.println(n3);
System.out.println(n4);
}
}
- 运行结果
2、原码、反码、补码
- 计算机中数据存储的方式以补码方式存储
Ⅰ、二进制的最高位是符号位:0代表整数,1表示负数;
码类型 | 二进制码值 |
---|---|
5的原码 | 00000101 |
-5的原码 | 10000101 |
Ⅱ、正数的原码,反码,补码都一样(三码合一);
码类型 | 二进制码值 (以5为例,byte类型) |
---|---|
原码 | 00000101 |
补码 | 00000101 |
反码 | 00000101 |
Ⅲ、负数的反码=原码符号位不变,其他位置取反,负数的补码=它的反码+1;
码类型 | 二进制码值(以-5为例,byte类型) |
---|---|
原码 | 10000101 |
补码 | 11111010 |
反码 | 1111011 |
Ⅴ、0的反码,补码都是0
Ⅵ、java中没有无符号数,换言之,java的数都是由符号的;
Ⅶ、计算机运算的时候,都是以补码的方式来运算的;
Ⅷ、当我们查看运算结果时,要看他的原码。
3、位运算
(1)位运算符总览
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
按位与& | 两位全为1,结果全为1,否则为0 | 2&3 | 2 |
按位 | | 两位有一个为1,结果为1,否则为0 | 2 | 3 | 3 |
按位异或 ^ | 两位一个为0,一个为1,结果为1,否则为0 | 2 ^ 3 | 1 |
按位取反~ | 0->1,1->0 | ~2 | -3 |
算数右移>> | 低位溢出,符号位不变,并用符号位补溢出的高位 | 1>>2 | 0 |
算数右移<< | 符号位不变,低位补0 | 1<<2 | 4 |
- 范例
public class hello{
public static void main(String[] args){
int n1 = 2&3;
int n2 = 2|3;
int n3 = 2^3;
int n4 = ~2;
int n5 = 1>>2;
int n6 = 1<<2;
System.out.println(n1);
System.out.println(n2);
System.out.println(n3);
System.out.println(n4);
System.out.println(n5);
System.out.println(n6);
}
}
- 运算结果
(2)位运算计算过程详述
-
范例:2&3的位运算结果
-
计算过程解析
码类型 | 二进制码值 |
---|---|
2的原码 | 00000000 00000000 00000000 00000010 |
2的补码 | 00000000 00000000 00000000 00000010 |
3的原码 | 00000000 00000000 00000000 00000011 |
3的补码 | 00000000 00000000 00000000 00000011 |
按位& | 00000000 00000000 00000000 00000010 |
00000000 00000000 00000000 00000011 | |
运算后的补码 | 00000000 00000000 00000000 00000010 |
运算后的原码 | 00000000 00000000 00000000 00000010 |
运算结果 | 2 |
public class hello{
public static void main(String[] args){
int n1 = 2&3;
System.out.println(n1);
}
}
- 运行结果