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