java中的位运算符

来源:互联网 发布:好听音乐网络歌曲 编辑:程序博客网 时间:2024/05/19 05:38

java中的位运算符

  • java中的位运算符
    • 概述
      • 分类
    • 说明
      • 左移
        • 原理
        • 被除数是负数的时候
      • 右移
        • 原理
        • 被除数是负数的时候
      • 无符号右移
        • 当数是负数的时候
      • 位与
      • 位或
      • 位异或
      • 位非
    • 衍生运算符

概述

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型

分类

左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符

说明

左移<<

    public static void main(String[] args) {        int a= 10;        System.out.println(a<<3);//80    }

实质就是a乘2的3次幂;

原理

把10转换成二进制:

00000000 00000000 00000000 00001010

然后整体向左移动三位,不足位用0补齐:

00000000 00000000 00000000 01010000

结果就是80

被除数是负数的时候

System.out.println(-10<<3);//-80

右移>>

    public static void main(String[] args) {        int a= 10;        System.out.println(a>>3);//1    }

实质就是10除以2的3次幂

原理

把10转换成二进制:

00000000 00000000 00000000 00001010

然后把数据整体向右移动三位,不足位用0补齐:

00000000 00000000 00000000 00000001

结果就是1

被除数是负数的时候

System.out.println(-10>>3);//-2

把-10的补码求出来:

原码:1 0000000 00000000 00000000 00001010

反码:1 1111111 11111111 11111111 11110101

补码:1 1111111 11111111 11111111 11110110

操作: 1 1111111 11111111 11111111 11111110 注意此处用1补位

反码:1 1111111 11111111 11111111 11111101

原码:1 0000000 00000000 00000000 00000010 就是-2

无符号右移>>>

没有无符号左移

System.out.println(10>>>3);

当要操作的数是正数的时候和普通右移结果相同

当数是负数的时候

        System.out.println(-10>>3);   //-2        System.out.println(-10>>>3);    //536870910

把-10的补码求出来:

原码:1 0000000 00000000 00000000 00001010

反码:1 1111111 11111111 11111111 11110101

补码:1 1111111 11111111 11111111 11110110

操作:0 0011111 11111111 11111111 11111110 注意此处用0补位

正数的原反补相同结果就是536870910

正数右移,高位用0补,负数右移,高位用1补,当负数使用无符号右移时,用0进行部位(自然而然的,就由负数变成了正数了)

位与&

System.out.println(10&5);//0

把10转换成二进制:

00000000 00000000 00000000 00001010

把5转换成二进制:

00000000 00000000 00000000 00000101

只有对应的两位都是1的时候才是1,否则就是0,那么结果就是0

位或|

System.out.println(10|5);//15

把10转换成二进制:

00000000 00000000 00000000 00001010

把5转换成二进制:

00000000 00000000 00000000 00000101

只有对应的两位某一个是1的时候结果就是1,否则就是0,那么结果就是15

位异或^

System.out.println(10^5);//15

把10转换成二进制:

00000000 00000000 00000000 00001010

把5转换成二进制:

00000000 00000000 00000000 00000101

当对应的两位不相等的时候是1,相同的时候是0,结果还是15

位非

System.out.println(~10 );//-11

把10转换成二进制:

00000000 00000000 00000000 00001010

求位非运算:

1 1111111 11111111 11111111 11110101

求反码:

1 1111111 11111111 11111111 11110100

求原码:

1 0000000 00000000 00000000 00001011 就是-11

衍生运算符

&= 按位与赋值

|= 按位或赋值

^= 按位非赋值

>>= 右移赋值

>>>= 无符号右移赋值

<<= 赋值左移

更多精彩好玩的文章请参见:天意的个人博客没有广告(⊙o⊙)哦

1 0
原创粉丝点击