2013-02-10 80 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。