20.1 二进制基本概念

二进制是逢2进位的进位制,01是基本算符。

现代的电子计算机技术全部采用的是二进制,因为它只使用01两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用01两个数字及其组合来表示任何数。进位规则是“逢21”,数字1在不同的位上代表不同的值,按从右至左的次序,这个值以两倍递增。

20.2 原码、反码、补码

网上对原码、反码、补码的解释过于复杂,这里精简成7句话:

对于有符号的而言(java的数都是有符号的,C的有些没有):

1、二进制的最高位是符号位:0表示整数,1表示负数

2、正数的原码、反码、补码都一样

3、负数的反码=原码符号位不变,其它位取反

4、负数的补码=反码+1

5、0的反码、补码都是0

6、Java没有无符号数,换言之,java中的数都是有符号的

7、在计算机运算的时候,都是以补码的方式来运算的。

20.3 位运算符

Java中有4个位运算,分别是“按位与&、按位或|、按位异或^、按位取反~”,它们的运算规则是:

按位与&:两位全为1,结果为1

按位或|:两位有一个为1,结果为1

按位异或^:两位有一个为0,一个为1,结果为1

按位取反~0->11->0

20.4 移位运算符

Java中有3个移位运算符。

>><<表示算术右移和算术左移,运算规则:

算术右移:符号位不变,低位溢出,并用符号位补溢出的高位

算数左移:符号位不变,低位补0(技巧:左移1位相当于十进制的数字乘以2

 

>>>表示逻辑右移,运算规则:

低位溢出,高位补0

 

演示代码如下:

 

 1 /**日期:2016-03-07
 2  * 功能:移位运算符和位运算符的演示
 3  */
 4 package test;
 5 public class Demo1 {
 6 
 7     public static void main(String[] args) {
 8         // TODO Auto-generated method stub
 9         
10         //算术右移
11         System.out.println("算术右移:");
12         System.out.println("1>>2="+(1>>2));
13         System.out.println("-1>>2="+(-1>>2));
14         System.out.println();
15         //算术左移
16         System.out.println("算术左移:");
17         System.out.println("1<<2="+(1<<2));
18         System.out.println("-1<<2="+(-1<<2));
19         System.out.println();
20         //逻辑右移
21         System.out.println("逻辑右移:");
22         System.out.println("3>>>2="+(3>>>2));
23         System.out.println();
24         
25         System.out.println("按位与:");
26         System.out.println("2&3="+(2&3));        
27         System.out.println("13&7="+(13&7));
28         System.out.println();
29         
30         System.out.println("按位或:");
31         System.out.println("2|3="+(2|3));
32         System.out.println("5|4="+(5|4));
33         System.out.println();
34         
35         System.out.println("按位取反:");
36         System.out.println("~2="+(~2));
37         System.out.println("~-5="+(~-5));
38         System.out.println();
39         
40         System.out.println("按位异或:");
41         System.out.println("-3^3="+(-3^3));
42         System.out.println();
43     }
44 }

 

运行结果如下:

 1 算术右移:
 2 1>>2=0
 3 -1>>2=-1
 4 
 5 算术左移:
 6 1<<2=4
 7 -1<<2=-4
 8 
 9 逻辑右移:
10 3>>>2=0
11 
12 按位与:
13 2&3=2
14 13&7=5
15 
16 按位或:
17 2|3=3
18 5|4=5
19 
20 按位取反:
21 ~2=-3
22 ~-5=4
23 
24 按位异或:
25 -3^3=-2