我有一个函数,它接受无符号long类型的索引变量(此类型不能更改)。
void func(unsigned long index);
我需要将其转换为位掩码,以便索引0的位掩码为1,索引1的位掩码为2,索引2的位掩码为4,依此类推。
我已经做了以下工作:
mask = 1 << index;
问题是我使用的是16位的体系结构,因此无符号的长变量显示为32位,这会弄乱这个变量。
(最低的16位为mask提供了正确的值,但最高的16位添加了额外的信息,这会弄糟这一点)。
也就是说,不是获取:mask=0000000000000001(16位)
我得到:xxxxxxxxxxxxx0000000000000001(32位)
有其他方法计算这个位掩码吗?
希望能得到帮助。
谢谢您。
最佳答案
您的基本代码是正确的,尽管我注意到您没有指定mask
的类型。
如果调用方将大于15的值传递到index
,您要做什么听起来你必须充分利用这种糟糕的情况根据您可以简单地从func
返回的上下文,您可以断言,也可以继续将mask
设置为零。
这让我们回到mask
类型的问题我会根据您的环境将其定义为unsigned short
、uint16
或类似的但除此之外,你的第一次尝试基本上是正确的这只是一个错误处理的问题。
uint16 shift = index & 15;
uint16 mask = 1 << shift;
关于c - 在16位架构中根据给定索引计算位掩码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52228353/