我已經設法擺脫了前幾位,但我如何在C語言中只保留最重要的6位?我已經嘗試了((num << 6) & 1),但沒有成功
uj5u.com熱心網友回復:
要獲得一個整數的最有意義的六位,而不是其余的,可以用一個掩碼進行位元化,設定高的六位,其余的清零。
因為unsigned int是一個純二進制型別,它的最大值,UINT_MAX,已經設定了它的所有位。然后UINT_MAX >> 6將這些位向右移動,產生一個高六位清零而其余位被設定的結果。執行一個位法NOT,~ (UINT_MAX >> 6),產生一個高六位被設定,其余被清除的結果。
那么num & ~ (UINT_MAX >> 6)產生的結果是num的高六位,其余位清零。
UINT_MAX在<limit.h>中宣告。由于C語言對無符號型別的包裝運算,你也可以通過使用-1u來獲得一個無符號int的最大值,所以num & ~ (-1u > > 6)也可以作業。
uj5u.com熱心網友回復:
不取決于整數寬度的通用方法
#define C6B(num) ((num) & ~((1ull < < (sizeof(num) * CHAR_BIT - 6) ) - 1))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/322479.html
標籤:
上一篇:用c語言從檔案中讀取數值
下一篇:鑄造時檢測到堆疊粉碎
