gpt4 book ai didi

c - C操作:return 1 when all bits of byte i of x equal 1; 0 otherwise的一道题

转载 作者:太空宇宙 更新时间:2023-11-04 05:48:24 24 4
gpt4 key购买 nike

You are asked to complete the following C function:

/* Return 1 when all bits of byte i of x equal 1; 0 otherwise. */
int allBits_ofByte_i(unsigned x, int i) {
return _____________________ ;
}

我的解决方案:!!(x&(0xFF << (i<<3)))

这道题的正确答案是:

!~(~0xFF | (x >> (i << 3 ))

谁能解释一下?

另外,有人可以看看我的回答,对吗?

最佳答案

表达式!~(~0xFF | (x >> (i << 3 ))评估如下。

  1. i<<3乘以 i通过 8 得到一些位数,这将是 0、8、16 或 24,具体取决于调用者想要测试的字节。这实际上是要忽略的位数,因为它是比我们感兴趣的字节更不重要的位数。
  2. (x >> ...)将测试值右移以消除我们不感兴趣的低位。感兴趣的 8 位现在是 unsigned 中的最低 8 位。我们正在评估的值(value)。请注意,可能会或可能不会设置其他更高位。
  3. (~0xFF | ...)将所有 24 位设置为我们感兴趣的 8 位以上,但不更改这 8 位。 ( ~0xFF0xFFFFFF00 的简写,是的,可以说应该使用 0xFFu)。
  4. ~(...)翻转所有位。如果每个位都已设置,这将导致值为零,而在所有其他情况下将导致非零值。
  5. !(...)逻辑上否定结果。仅当在步骤 3 期间设置了每一位时,这将导致值 1。换句话说,我们感兴趣的 8 位中的每一位都已设置。 (其他 24 位在步骤 3 中设置。)

该算法可以概括为,设置我们不感兴趣的 24 位,然后验证是否设置了 32 位。

您的回答采用了稍微不同的方法,即转移 0xFF向左掩码而不是向右移动测试值。这也是我对如何解决这个问题的第一个想法!但是您的逻辑否定并不能验证每一位都已设置,这就是为什么您的答案不会在所有情况下都产生正确结果的原因。

关于c - C操作:return 1 when all bits of byte i of x equal 1; 0 otherwise的一道题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52726565/

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