gpt4 book ai didi

c - 这两个二进制逻辑表达式是否相等?

转载 作者:太空宇宙 更新时间:2023-11-03 23:45:32 26 4
gpt4 key购买 nike

给定问题:

Write C expressions, in terms of variable x, for the following values. Your code should work for any word size w ≥ 8. For reference, we show the result of evaluating the expressions for x = 0x87654321, with w = 32.

B. All but the least significant byte of x complemented, with the least significant byte left unchanged. [0x789ABC21].

我想到了解决方案:

(~x)^0xFF 但提供的解决方案是:x ^ ~0xFF - 这些是等效表达式吗?

最佳答案

实际上,并不总是等价的,您的解决方案要好得多:

(~x) ^ 0xFF 对所有整数类型的 x 进行补码并恢复低位字节。

x ^ ~0xFF 更棘手:~0xFF 将被计算为 int 然后扩展为 的类型x 在异或之前。如果 x 是大于 int 的整数类型,并且 int 的表示是符号 + 大小,它可能无法按预期工作。

确实是下面的代码:

unsigned long x = 12345678;
x = x ^ ~0xFF;

使用 clang -Weverything 产生以下警告:

xxo.c:4:13: warning: implicit conversion changes signedness: 'int' to 'unsigned long' [-Wsign-conversion]
x = x ^ ~0xFF;
~ ^~~~~

此外,请注意,如果 w 的大小小于 int 的大小,则这两个表达式都不正确。例如,int 是 32 位,short 是 16 位:

unsigned short x = 0x4321;

预期的结果应该是0xBC21,但是:

x ^ ~0xFF  ->  0x4321 ^ 0xFFFFFF00  ->  0xFFFFBC21

(~x) ^ 0xFF  ->  0xFFFFBCEF ^ 0xFF  ->  0xFFFFBC21

要解决此问题,应将表达式转换为 x 类型,最好是无符号类型。

最后,请注意您可以这样缩短表达式:0xFF ^ ~x

关于c - 这两个二进制逻辑表达式是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34475833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com