java 按位运算符

左移运算符 <<

它能够将一个二进制数的所有位向左移动指定的位数。左移运算符的运算规则如下:

1. 将二进制数左移n位,相当于将数值乘以2的n次方。 例如,将二进制数0b1011左移2位,即为0b101100,相当于将11乘以2的2次方(即4),得到44。

2. 左移运算符不会改变操作数的符号。左移后,右补0。 无论操作数是正数、负数还是零,左移运算符都只进行位级移动,不会改变符号。

3. 左移运算符会对溢出进行截断。

右移运算符 >>

    int a = 8;
     a >> 3  //a = 1 (8 / 2的3次方) 

    1、将二进制数右移n位,相当于将数值除以2的n次方
    2、对于运算符对正数、负数、零的处理方式不同
        对于正数,符号位不变,右移时左补0
        对于负数,符号位不变,右移时左补1
        对于零,右移运算符操作后结果仍为0
    3、右移运算符会溢出进行截断


无符号右移运算符 >>> 


    1、将二进制数右移n位,相当于将数值除以2的n次方,并将最高位填充为0
    2、任意一个数进行无符号右移后一定是非负数
    3、右移运算符会溢出进行截断

按位与 &


    1、将两个整数的二进制表示按位进行与运算,
    只有当相应的二进制位都为1时,结果才为1,否则结果为0
    a的二进制:00100000
    b的二进制:00011001
    按位与之后:00000000
    2、应用一下:请使用按位与运算符判断某个数字是否为奇数?
    思路:拿着这个数字和1进行按位与,如果结果是1,则表示该数字为奇数。


按位或 |


    1、将两个整数的二进制表示按位进行或运算,
    只有当相应的二进制位都为0时,结果才为0,否则结果为1  
    a的二进制:00100000
    b的二进制:00011001
    按位或之后:00111001
    2、请将0这个数字中第4位的二进制位设置为1(按位或的具体应用,将某个二进制位设置为1)
    int flag = 0;
    flag = flag | (1 << 3);


按位异或 ^


    1、将两个整数的二进制表示按位进行异或运算,只有当相应的二进制位不同,结果才为1,否则结果为0
    2、自反性 两次按位等于本身
    3、可实现简单的加密


按位取反 ~


    将整数的二进制表示按位进行取反运算,即0变为1,1变为0
    System.out.println(~100); // -101
    100的二进制:01100100
    取反后:10011011(这是一个补码哦)
    将补码转为原码:11100101 (-101)
    应用一下:位清除操作(将某个二进制位中指定位清除为0),例如有这样一个二进制:0b01101101,将第4个低位清除为0
    int value = 0b01101101;// 待清除数据
    int flag = 1 << 3; // 需要清除第4个低位
    int result = value & (~flag);// 使用这种方式运算进行位清除

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值