如何将 C unsigned int 中的底部 n 位清零?
Posted
技术标签:
【中文标题】如何将 C unsigned int 中的底部 n 位清零?【英文标题】:How to zero out bottom n bits in a C unsigned int? 【发布时间】:2013-02-10 06:54:07 【问题描述】:我正在尝试编写自己的 C 楼函数。我被困在这个代码细节上。我只想知道如何将 unsigned int 的底部 n 位归零。
例如,要将 51.5 舍入到 51.0,我需要将底部 18 位归零,并保留前 14 位。由于它是一个底函数,我想制作一个掩码以将底部归零(23 减去指数)来自浮点表示的位。我知道如何为这样的个别情况制作面具,但我不确定如何对其进行编码以使其适用于所有人。请帮忙。
【问题讨论】:
int floor(float number) return (int)number;
工作
下定决心 - 数字和无符号是短的还是浮点数?你试过什么?
抱歉,刚刚编辑。该数字是一个无符号整数
我正在尝试将 unsigned int 的底部位归零。
我已经做了一些例子。要将 51.5 舍入到 51.0,我需要保留数字的前 14 位。所以我会做数字和FFF20000。但由于每次都会有所不同,我不确定如何编写适合所有人的东西。
【参考方案1】:
一个更简单的方法就是这样做:
value = (value >> bits) << bits
因为左移会用零填充它,而不是其中的任何内容。
【讨论】:
我特别喜欢这个。非常优雅。 非常感谢你们!! 对不起,你能解释一下这里的比特和价值吗?在我试图保留前 14 位的示例中,掩码是否应该是这样的: value = (value >> 14) 【参考方案2】:将一个数字左移 N 位。减一。反转位。还有你需要屏蔽的号码。
1 << 14 = 00000000000000000010000000000000
-1 = 00000000000000000001111111111111
~ = 11111111111111111110000000000000
当你and
时,掩码中的 1 将保留输入,掩码中的 0 会将结果设置为 0。
【讨论】:
以上是关于如何将 C unsigned int 中的底部 n 位清零?的主要内容,如果未能解决你的问题,请参考以下文章
在 c 中的 unsigned short int 中分配零
C语言实现unsigned char 转换unsigned int?