提问人:Николай Шлиппе 提问时间:2/20/2023 最后编辑:Николай Шлиппе 更新时间:2/20/2023 访问量:101
理解异或和与零的比较
Understanding of xor sum comparing with zero
问:
我有一些有趣的代码可以批准接收到的数据(?)。此代码执行如下操作:
// some recieved data const char data[n]
unsigned char low = 0;
unsigned char high = 0;
for(int i = 0; i < n; i += 2) {
low ^= data[i];
high ^= data[i+1];
}
if(low != 0 || high != 0) {
// prints error
return;
}
在这里,我无法理解这种比较语句的含义。如果它与某个值进行比较,而不仅仅是零,那将是显而易见的。为什么 low 和 high 必须等于零才能继续处理接收到的数据。对不起,问题太简单了,但谷歌和聊天 gpt 没有向我解释清楚。谢谢。
答:
4赞
463035818_is_not_an_ai
2/20/2023
#1
消息的所有字节都可以用作校验和。它利用了这样一个事实。总和由发送方和接收方共同计算。发件人将其校验和添加到邮件中。如果接收方计算所有字节(包括校验和),他们应该得到一个或消息已损坏。xor
a xor a == 0
xor
0
评论
1赞
rcgldr
2/21/2023
从技术上讲,代码 xor 的 16 位字,而不是 8 位字节,并假设这是一个偶数。n
评论
a ^ b == c
(a ^ b) ^c == 0