gpt4 book ai didi

将 "if between"与按位运算符而不是逻辑运算符进行比较

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:09 25 4
gpt4 key购买 nike

好吧,我知道这是一个非常卑鄙的任务,我从中做了噩梦,但也许..我会破解那个代码,感谢你们中的某个人。

我想用按位运算符比较数字是否在 0 到 10 之间。就是这样。它介于 0 和 10 之间,而不是例如介于 0 和 2、0 和 4、0 和 8 之间等等。

0-4 位数字/二进制表示的引用。 (小端)

0 0

1 1

2 10

3 11

4 100

5 101

6110

7111

8 1000

9 1001

10 1010


11 1011

12 1100

13 1101

14 1110

15 1111


试图找出类似的东西如果(((变量 & 4) >> 变量) + (变量 & 10))

最佳答案

我尝试仅使用按位运算符来解决它(不添加)。

如果数字 (v) 超出 0 - 10 的范围,下面的表达式将计算为非零值:

(v & (~0xFU)) |
( ((v >> 3) & 1U) & ((v >> 2) & 1U) ) |
( ((v >> 3) & 1U) & ((v >> 1) & 1U) & (v & 1U) )

如果数字大于 15,则第一行不为零(任何高于前四位的位都已设置)。如果在低 4 位中它在 12 和 15 之间(含),则第二行是非零的。如果低 4 位中的数字是 11 或 15,则第三行不为零。

问题中并不清楚,但是如果要测试的数字限制在 0 - 15 之间(包括低 4 位),那么这里可能会出现更好的情况:

  ((~(v >> 3)) & 1U) |
( ((~(v >> 2)) & 1U) & (( ~v ) & 1U) ) |
( ((~(v >> 2)) & 1U) & ((~(v >> 1)) & 1U) )

如果数字介于 0 和 7 之间(含 0 和 7),则第一行为 1。如果数字是 0、2、8 或 10 之一,则第二行为 1。如果数字是 0、1、8 或 9 之一,则第三行为 1。因此,如果数字介于 0 和 之间,则 OR 组合表达式为 1 10 包括在内。有关此解决方案,您还可以查看 Karnaugh map ,它可以帮助生成这些(也可以用来证明这里没有更简单的解决方案)。

我认为我无法以合理的方式严格仅使用按位运算符。但是,如果您可以使用加法,它就会变得简单得多,正如 Pat 的解决方案所示。

关于将 "if between"与按位运算符而不是逻辑运算符进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25955425/

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