gpt4 book ai didi

c - 如何从 C 中的数字中提取特定位?

转载 作者:太空狗 更新时间:2023-10-29 16:28:18 25 4
gpt4 key购买 nike

我需要在 C 中提取 short 数据类型的特定部分(没有位)。

例如,我有一个二进制 52504 为 11001101000 11000,我想要前 6(从 LSB --> MSB 即 011000 十进制 24)位和其余 10 位(11001101000 十进制 820)。

同样,我希望此函数过于笼统,无法提取给定“开始”和“结束”的特定位数(即,与某个十进制值等效的位 block )。

我检查了其他帖子,但这些都没有帮助,因为给定的功能并没有太泛化。

我需要一些可以用于 C 的 short 数据类型的东西。

编辑

我有一个大小为 2048 字节的短数组。其中每个像素为 10 位。所以我的 16 位由每个字节组成,有时占用 2 个像素数据,有时占用 3 个像素数据。

喜欢

(像素:0,1) 10 位 + 6 位

然后(像素:1,2,3) 4 位(第一个像素剩余位)+ 10 位 + 2 位。

等等......这种模式继续......所以,我只想提取每个像素并制作一个完整的数组,让每个像素都被整个字节(16 位)完全占用,比如..1个字节应包含1个DATA PIXEL,另一个字节应包含整个16位中的其他PIXEL值,依此类推。

最佳答案

要自己构建它,您需要了解两个构建 block :

  • 获取 N最低有效位需要用 N 构造一个位掩码那些在最后。你这样做:((1 << N)-1) . 1 << N2 ^ N : 它有一个 1N+1 st 位置,其后全为零。减去 1 即可得到所需的掩码。
  • 丢弃 M最低有效位是一个简单的右移:k >> M

现在你的算法是从M中切出至 N变成一个两步过程:你移动原始值 M位向右,然后按位执行 AND带着 N-M 的面具

#define LAST(k,n) ((k) & ((1<<(n))-1))
#define MID(k,m,n) LAST((k)>>(m),((n)-(m)))

int main() {
int a = 0xdeadbeef;
printf("%x\n", MID(a,4,16));
return 0;
}

此片段将位从 4(含)剪切到 16(不包含),并打印 bee当你运行它时。位从零开始编号。

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

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