gpt4 book ai didi

c - 如何从 32 位数字中提取位

转载 作者:行者123 更新时间:2023-12-01 09:57:59 26 4
gpt4 key购买 nike

我对 C 的了解不多,但我遇到了一个问题,因为我的一位同事正在休假。

我有一个 32 位数字,我必须从中提取位。我确实经历了一些线程,但我仍然不清楚如何做到这一点。如果有人可以帮助我,我将非常感激。

这是我需要做的一个例子:

假设十六进制数 = 0xD7448EAB .
二进制 = 1101 01<em><strong>11 0100 0100 1000 11</strong></em>10 1010 1011 .
我需要提取 16 位,并输出该值。我想要位 10 到 25。

忽略低 10 位(十进制)。即 10 1010 1011被忽略。
并且忽略高 6 位(溢出)。即1101 01被忽略。

剩下的 16 位数据需要输出,即 11 0100 0100 1000 11 (需要斜体数字作为输出)。

这是一个例子,但我会一直得到不同的十六进制数字,我需要提取与我解释的相同的位。

我该如何解决这个问题?
谢谢。

对于本例,您将输出 1101 0001 0010 0011 ,即 0xD123 ,或十进制数 53,539。

最佳答案

你需要掩码来获得你想要的位。 掩码 是您可以用来以您想要的方式筛选位的数字(保留位、删除/清除位、修改数字等)。您需要了解的是 AND、OR、XOR、NOT 和 shift 操作。对于你需要的,你只需要一对。

你知道转移: x << y 将位从 x *y 位置向左移动*。

如何将 x 位按顺序设置为 1: (1 << x) - 1

如何将 x 位设置为 1,按从 y 到 y + x 的顺序: ((1 << x) -1) << y

以上是您需要的位的掩码。因此,例如,如果您想要 16 位 0xD7448EAB,从 10 到 25,您将需要上面的,对于 x = 16 和 y = 10。

现在要获得您想要的位,只需 AND 您的号码 0xD7448EAB 和上面的掩码,您将得到 masked 0xD7448EAB 以及您想要的位。稍后,如果您想遍历每一个,则需要将结果向右移动 10 并一次处理每个位(在位置 0)。

答案可能会更长一些,但它比仅仅使用 0xff 或其他硬编码更好的设计。

关于c - 如何从 32 位数字中提取位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21540158/

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