程序代中异或计算公式和计算器中的不同

异或存在两个方式按位(bitwise)和逻辑(logic),软件中用于校验数据真伪一般使用按位异或方式。代码中按位异或的符号是^,而计算器中则是,并且要注意的一点是:^在计算器(或者Google搜索框中)中有另外一个意义次方。程序代码中的数学计算公式很大一部分可以直接拷贝到计算器(或者Google搜索框)中直接计算,但涉及到异或运算则不能再这样计算。

比如代码0x01^0x01计算出来的是0,但是将公式拷贝到计算器中计算出来的是1,看如下:
这里写图片描述
这里写图片描述

而程序代码计算:

public class HelloWorld{
  // 程序的入口
  public static void main(String args[]){
    // 向控制台输出信息
    System.out.println(Integer.toHexString(0x01^0x01));
  }
}

输出结果:0

基于常规运算+-*/在代码公式和计算器的公式都是一致的,导致会习惯性的找Google或者计算器计算一下代码的中公式,而今遇到^这个符号,在代码和计算器中的意义不一样,导致摔了一个大跟头。

补充:
异或计算一般是按照按位(这里的位是二进制位)进行异或这一点没有问题了,但是像串口传递过来的数据一般都是字符串,先转换成byte数组。会有按单个byte进行异或,还会有两个两个byte一起组成一个数再进行异或的。比如12345678第一种方式是1^2^3^4^5^6^7^8第二种方式是12^34^56^78
我具体困惑的原因是没有弄清楚是两位异或还是单位异或,导致计算结果不一致,开启了怀疑是「逻辑异或」还是「按位异或」的不归路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁保康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值