第五章运算符—位运算符

一、位运算符

        Java 定义的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括 long,int,short,char 和 byte。
        位运算符主要用来对操作数二进制的位进行运算。按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值。
        Java 语言中的位运算符分为位逻辑运算符和位移运算符两类,下面详细介绍每类包含的运算符。

位逻辑运算符

         位逻辑运算符包含 4 个:&(与)、|(或)、~(非)和 ^(异或)。除了 ~(即位取反)为单目运算符外,其余都为双目运算符。表 1 中列出了它们的基本用法。

public class Op6 {
public static void main(String[] args) {
//十进制 %d
int a = 10;
System.out.println(a * 2);
//------------------------------------------------------十六进制
// 0 - f
//#ff00ff #rrggbb
Color c1 = new Color(255,0,255);
Color c2 = new Color(0xff,0x00,0xff);
System.out.println(0xff); //255
// 10 to 16
System.out.println(Integer.toHexString(255));
System.out.printf("%02x%n",255);
System.out.printf("%02X%n",255);
//16 to 10
int n16 = Integer.valueOf("a",16);
System.out.println(n16);//10
System.exit(0);
//------------------------------------------------------八进制
// 0 1 2 3 4 5 6 7 10 11 12 13 14 16 1
System.out.println(020);//16
//20 10 to 8
System.out.println(Integer.toOctalString(16));
//8 to 10
int b = Integer.valueOf("20",8);
System.out.println(b);
//-------------------------------------------------------二进制
//直接输出进制,以十进制输出
System.out.println(0b00000011);
System.out.println(0b11);
//十进制转换为二进制
System.out.println(Integer.toBinaryString(2));//10
System.out.println(Integer.toBinaryString(3));//11
//二进制转换为十进制
//1101
// 0000 0000 0
// 0000 0001 1
// 0000 0010 2
// 0000 0011 3
int s2 = Integer.valueOf("10",2);
System.out.println(s2);
//10
System.out.println(0b10);
System.out.println(2&3);
 }
}

位与运算符

        位与运算符为 &,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么计算结果才为 1,否则为 0。因此,任何数与 0 进行按位与运算,其结果都为 0。
例如下面的表达式:

100&0

图所示为这个运算过程,结果为 0。

 下面是两个非零的数字进行位与运算的过程。

    int x = 5,y = 12; // 创建整型变量保存两个数
    int z = x&y; // 对这两个数进行位与运算,结果保存到z

这两行语句执行后变量 Z 的值是 4,图所示为这个运算过程。

位或运算符

        位或运算符为 |,其运算规则是:参与运算的数字,低位对齐,高位不足的补零。如果对应的二进制位只要有一个为 1,那么结果就为 1;如果对应的二进制位都为 0,结果才为 0。
下面是一个使用位或运算符的表达式。

11|7

运算结果为 15,图所示为其运算过程。

位异或运算符

         位异或运算符为^,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;如果对应的二进制位不相同,结果则为 1。

 下面是一个使用位异或运算符的表达式。

11^7

运算结果为 12,图所示为其运算过程。

提示:在有的高级语言中,将运算符^作为求幂运算符,要注意区分。

位取反运算符

         位取反运算符为~,其运算规则是:只对一个操作数进行运算,将操作数二进制中的 1 改为 0,0 改为 1。
下面是一个使用位取反运算符的表达式。

~10

运算结果为 65525,图所示为其运算过程。
 

我们可以使用如下的程序来检查这个运算结果。

  1. int i = 10;
  2. System.out.printf("%d \n",~i);

        编译执行以上程序,会发现输出的结果是 -11,而不是 65525。这是因为取反之后的结果是十六进制数,而在上面的程序中使用 %d 将输出转换为了十进制数。
可以使用如下语句查看十六进制结果。

  1. int i=10;
  2. System.out.printf("%x \n",~i);

        可以看到输出结果为 fff5,将它转换为二进制是 1111111111110101。这个二进制数的最高位为 1,表示这个数为负数。除最高位外,按位取反再加 1,即得到二进制原码 1000000000001011,用十进制数表示即为 -11。
注意:位运算符的操作数只能是整型或者字符型数据以及它们的变体,不用于 float、double 或者 long 等复杂的数据类型。

位移运算符

         位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。表列出了 Java 语言中的两个位移运算符,它们都属于双目运算符。

         位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。表列出了 Java 语言中的两个位移运算符,它们都属于双目运算符。

表位移运算符
运算符含义实例结果
»右移位运算符8»14
«左移位运算符9«236

左位移运算符

         左移位运算符为 «,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
例如,将整数 11 向左位移 1 位的过程如图所示。
 

从图中可以看到,原来数的所有二进制位都向左移动 1 位。原来位于左边的最高位 0 被移出舍弃,再向尾部追加 0 补位。最终到的结果是 22,相当于原来数的 2 倍。

右位移运算符

         右位移运算符为 »,其运算规则是:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。
例如,将整数 11 向右位移 1 位的过程如图所示。
 


        从图中可以看到,原来数的所有二进制位都向右移动 1 位。原来位于右边的最低位 1 被移出舍弃,再向最高位追加 0 补位。最终到的结果是 5,相当于原数整除 2 的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值