c++ - 为什么 C/C++ 按位 XOR 运算符关心符号?
问题描述
很长一段时间以来,我一直在为一些低级消息而苦苦挣扎,结果证明这是校验和计算的问题。我认为按位异或运算符不关心符号,所以我使用 aQByteArray
来存储字节,并使用at
返回 a 的方法char
来计算校验和。有时会正确确认消息,但并非总是如此。
看起来另一端的人正在使用uint8_t
存储字节,并且在某些情况下校验和失败。我通过投射char
to解决了这个问题uint8_t
,但我对此感到非常困惑。
为什么按位异或运算符关心符号?我认为它在位级别上起作用,无论它们代表什么。这是我用来尝试理解它的一段代码。
#include <stdio.h>
#include <stdint.h>
#include <iostream>
#include <bitset>
int main ()
{
uint8_t a = 0b10010101;
char b = 0b10010101;
uint32_t checksum;
checksum = 55;
checksum ^= a;
std::cout << std::bitset<32>(checksum) << std::endl;
checksum = 55;
checksum ^= b;
std::cout << std::bitset<32>(checksum) << std::endl;
}
即使两个整数持有相同的位,该操作在每种情况下都会产生不同的结果。
解决方案
推荐阅读
- angular - 角度分页在数据表中不起作用
- c++ - DLL 和 EXE 中具有相同名称和父级但实现不同的类中的问题
- spring - 带有弹簧的消息驱动 POJO。收不到消息
- json - 关于 API RESTful 请求的说明
- java - NetworkSecurityConfig:未指定网络安全配置,使用平台默认错误响应代码:400
- gcc - 覆盆子半精度浮点(binary16,替代,__fp16)上的 gcc 使用库函数
- html - 如何添加 div 的平滑三角形底部
- html - 对象变量或带块变量未设置getelementsbyname vba
- python - 无法从此 URL 发布“匹配日期”
- terraform - 将 cloudflare_zone_settings_override 应用于多个区域