byte型&十六进制

本文探讨了在Java中,`&`运算符用于byte类型数据时的情况。指出虽然`&`通常作为逻辑运算符使用,但在位运算中,它对二进制补码进行操作。文章解释了计算机如何用二进制补码存储负数,并通过实例展示了byte类型的-127与0xff进行位运算的过程,强调了保持二进制补码一致性的意义。
摘要由CSDN通过智能技术生成
先po出一段代码
if (((int)scanData[startByte+2] & 0xff) == 0x02 &&((int)scanData[startByte+3] & 0xff) == 0x15) {			
   patternFound = true;
   break;
   }

看到if判断中的“&”,我首先是好奇它在此处是逻辑运算符还是位运算符。(这是不是一个比较傻的想法?)

后来发现,“&”在此处做逻辑运算符没什么意义,但是它作为位运算符,在这为什么要这样用?

首先来看“&”作为位运算符的用法:

       &(按位与)主要是两个二进制操作数进行按位与操作时,两位都是1结果才是1,即如果是1&1得到的结果才是1,其他情况都是0。

于是我又有一个奇怪(蠢)的想法:&是只能被二进制数操作吗?那在此处左右两边都不是二进制,是怎么回事?在被人鄙视过之后,才明白&只是操作数的二进制形式,操作数可以是二、八、十、十六进制。

于是第三个问题:0xff的十进制是255,八位二进制就是11111111,一个数&上它,应该是不变的。

网上查原因,发现了一个例子:

public class Test {

    public static void main(String[] args) {
        byte[] a = new byte[10]
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值