char xtime(char m)
{
//calculates the m value by checking m,if m is less than 0x80 hexadecimal
// then it is left shifted else it is left shifted and xor'ed with 0x1b.
if(m<0x80)
{
m<<=1;
} else {
m=(((m)<<1)^0x1b);
}
printf("%#01x ",m&0xff);
return m;
}
如果m = 0x80(這是0x1b),此代碼不顯示預期的輸出,它以十六進制的形式給出輸出0。具有相同邏輯的兩段代碼。一個給出預期的輸出,另一個不給出
#define xtime(a) (((a)<0x80)?(a)<<1:(((a)<<1)^0x1b))
此代碼的工作原理,並給出了預期的結果。
請問功能代碼出了什麼問題,以及第二個代碼是如何解決的。
'char'可能會根據環境進行簽名,如果'char'是8位長並且被簽名,則'0x80'可能不適合它。如果int類型的值被傳遞,第二個代碼應該可以工作,因爲int可以保存至少32767的整數。 – MikeCAT
對於字符只使用'char'是個好主意。如果您需要一個小整數類型,請使用'signed char'或'unsigned char'。就你而言,後者似乎是你需要的。 –
對於C++,您應該考慮'inline'而不是宏。 – crashmstr