我想写我自己的C层功能。我被困在这个代码细节。我只想知道如何将unsigned int的底部n位清零。如何清零C无符号整数的底部n位?
例如,要将51.5到51.0舍入,我需要将底部的18位清零,并保留顶部14.因为它是一个底层函数,所以我想要制作一个掩码来清零底部(23减去指数)来自浮点表示的位。我知道如何为这样的个人案例制作一个面具,但我不知道如何编写代码,以便它适用于所有人。请帮忙。
我想写我自己的C层功能。我被困在这个代码细节。我只想知道如何将unsigned int的底部n位清零。如何清零C无符号整数的底部n位?
例如,要将51.5到51.0舍入,我需要将底部的18位清零,并保留顶部14.因为它是一个底层函数,所以我想要制作一个掩码来清零底部(23减去指数)来自浮点表示的位。我知道如何为这样的个人案例制作一个面具,但我不知道如何编写代码,以便它适用于所有人。请帮忙。
一个更简单的方法是仅此做:
value = (value >> bits) << bits
因为左移将填满零,而不是在那里。
我特别喜欢这个。十分优雅。 – 2013-02-10 07:02:36
非常感谢你们两位! – user2057841 2013-02-10 07:04:39
对不起,你能解释一下这里有什么位和价值吗?在我的例子中,我试图保持前14位,这是真的,面具应该是这样的:value =(value >> 14)<< 18 – user2057841 2013-02-10 07:08:48
将数字左移N位。减去一个。反转位。和你需要掩盖的数字。
1 << 14 = 00000000000000000010000000000000
-1 = 00000000000000000001111111111111
~ = 11111111111111111110000000000000
当你and
这个问题,一个1面膜会保存输入,以及0面具将设置结果为0。
'int floor(float number){return(int)number;}'作品 – 2013-02-10 06:56:39
决定你的想法 - 数字和无符号短整数还是浮点数?你有什么尝试? – 2013-02-10 06:57:21
对不起,刚编辑。该数字是一个无符号整数 – user2057841 2013-02-10 06:58:27