我需要對32位整數進行bitewise操作(確實是represent chars,但無論如何)。比較(uint32_t)和硬編碼值是否安全?
以下代碼是否安全?
uint32_t input;
input = ...;
if(input & 0x03000000) {
output = 0x40000000;
output |= (input & 0xFC000000) >> 2;
我的意思是,在「如果」的聲明,我做的按位操作上,在左側,一個uint32_t的,並在右邊...我不知道!
那麼你是否知道硬編碼的「0x03000000」的類型和大小(我的意思是它存儲了多少字節)?
是否有可能某些系統認爲0x03000000是一個int,因此只能在2個字節上編碼,這將是災難性的?
看起來完全正常我。 –
將右側提升爲它所適合的最小整數類型(如果它比'int'短,則爲'int'),因此比較是安全的。 – 2013-06-29 11:26:23
1.您可以隨時將其轉換爲您需要的內容:'(uint32_t)0x03000000'。 2.你應該使這些'#define'清晰並且重複使用。您也可以添加演員陣列:'#define MYBITS(uint32_t)0x03000000'。 – 2013-06-29 14:18:36