如何将C unsigned int中的底部n位清零?

时间:2013-02-10 06:54:07

标签: c

我正在尝试编写自己的C楼功能。我坚持这个代码细节。我只想知道如何将unsigned int的底部n位清零。

例如,要将51.5舍入到51.0,我需要将最后18位归零,并保持前14位。因为它是一个底层函数,我想制作一个掩码将底部清零(23减去指数)浮点表示中的位。我知道如何为这样的个别情况制作面具,但我不知道如何对它进行编码以使其适用于所有人。请帮忙。

2 个答案:

答案 0 :(得分:8)

更简单的方法是这样做:

value = (value >> bits) << bits

因为左移将用零填充,而不是在那里。

答案 1 :(得分:3)

将数字左移N位。减去一个。反转位。并且需要掩盖的数字。

1 << 14 = 00000000000000000010000000000000
     -1 = 00000000000000000001111111111111
     ~  = 11111111111111111110000000000000

使用此and时,掩码中的1将保留输入,掩码中的0将结果设置为0.