当前位置: 首页 > 知识库问答 >
问题:

对给定值进行按位and操作,从而得到所需的输出[关闭]

燕和裕
2023-03-14

我想在下面提到的操作中确定X的值:

X & 0x08 = 8

在这种场景下如何找出x?

共有2个答案

吕衡
2023-03-14

问题是,有很多数字和给定的数字结合起来会得到相同的结果。按位运算并不像算术运算那样是可逆的。
但是,您可以找到一组可能的数字X来产生正确的结果。算法将是相当简单的(和语言不可知的)。

假设我们想要x&b==c,其中b是12,c是8。您需要得到已知数和结果的二进制表示

b == 12 == 00001100
c ==  8 == 00001000

X必须满足的规则如下:

  • 对于c中每一个等于1的位,bx中的相应位必须等于1
  • 对于c中等于0的位,如果b中的对应位为1,则x中的对应位必须为0。
  • 对于c中等于0的位,如果b中的对应位为0,则x中对应位的值未知。

根据这些规则,我们可以确定在我们的示例

b == 12 == 00001100
c ==  8 == 00001000
X       == ????10??

在每个下,可以替换1或0,将得到正确的结果。例如,00001000(8)和11111011(251)都将是有效的解决方案。

百里智勇
2023-03-14

如果你问这个,那么可能有几件事你不明白。

X & 0x08 = 8

让我们从最简单的部分开始:0x08。这只是十六进制的表示,这就是计算机程序员想知道单个字节包含什么时的想法。(如果你不知道字节是什么,那就为计算机内存字节做个谷歌吧,这是一个很重要的概念。)

本例中,0x08只是一个普通的8。在二进制中,这意味着0000 1000。正好设置一位。

现在让我们做&符号。在本例中,它代表按位与。(如果你不知道比特是什么,继续读比特和字节。比特是字节中的一个二进制数字。0或1。)

有几个基本的位操作。

& -- AND -- the corresponding bit in both numbers is set
| -- OR  -- if either is set
^ -- XOR -- exclusive or -- one or the other is set

所以如果我们有两个数字,A和B,如下所示:

A 0101 0101
B 0000 1111

则:A&B==0000 0101 A B==0101 1111 A^B==0101 1010

所以...在X和0x08的情况下,0x08==0000 1000。你应该能从这里想出来。

 类似资料:
  • 问题内容: 嗨,我有一个表测试,其结构如下: 现在,我需要查询该表(测试),以便获得以下输出。 Oracle 11g中的sql查询是否可以实现?11g中的PIVOT功能是否可以实现? 问题答案: 不,它不能用来完成,但是 可以 用来完成: 当不可用时,我通常会像这样取消透视:

  • 代码: 产出:4 1 [代码连结][1] 前缀运算符的优先级高于逻辑运算符。2.逻辑<代码> 怀疑: > 为什么这里不遵循第一条规则?这不应该是正确的吗? 因此,在printf语句中,的值变为5。 为什么这里违反了一般的优先规则?当两个运算符的优先级相同时,关联性开始起作用。编译器不应该首先查看是计算还是

  • 我试图排序的hashmap的结构的值从高到低。 我在下面创建了一个函数来对数据进行排序。 我收到以下错误: 异常在线程"main"java.lang.ClassCastException:类java.lang.String不能转换为类java.lang.整数(java.lang.String和java.lang.整数在加载器'bootstrap'的模块java.base) 我相信我的错误是由上面的

  • 问题内容: 给定此数组: 我想按价格对元素进行排序以获得: 我怎样才能做到这一点? 问题答案: 没错,您要寻找的功能是。 以下是直接取自手册并适合您的情况的示例: 从PHP 5.5.0开始,您可以使用array_column()代替foreach

  • 问题内容: 这里,是一本字典,并且都是字符串。 当我尝试写入文件时,它报告错误: 问题答案: 正确缩进;您的陈述应在区块内: 在块外部,文件已关闭。