2013-02-10 36 views
0

我想写我自己的C层功能。我被困在这个代码细节。我只想知道如何将unsigned int的底部n位清零。如何清零C无符号整数的底部n位?

例如,要将51.5到51.0舍入,我需要将底部的18位清零,并保留顶部14.因为它是一个底层函数,所以我想要制作一个掩码来清零底部(23减去指数)来自浮点表示的位。我知道如何为这样的个人案例制作一个面具,但我不知道如何编写代码,以便它适用于所有人。请帮忙。

+1

'int floor(float number){return(int)number;}'作品 – 2013-02-10 06:56:39

+0

决定你的想法 - 数字和无符号短整数还是浮点数?你有什么尝试? – 2013-02-10 06:57:21

+0

对不起,刚编辑。该数字是一个无符号整数 – user2057841 2013-02-10 06:58:27

回答

7

一个更简单的方法是仅此做:

value = (value >> bits) << bits 

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

+0

我特别喜欢这个。十分优雅。 – 2013-02-10 07:02:36

+0

非常感谢你们两位! – user2057841 2013-02-10 07:04:39

+0

对不起,你能解释一下这里有什么位和价值吗?在我的例子中,我试图保持前14位,这是真的,面具应该是这样的:value =(value >> 14)<< 18 – user2057841 2013-02-10 07:08:48

2

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

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

当你and这个问题,一个1面膜会保存输入,以及0面具将设置结果为0。