问题描述
我想要做的是将一个数字(可能带有符号)嵌入到 32 位整数的高 16 位中。我目前拥有的:
#define EMbed_PARM(x,parm) ((typeof(x))((((unsigned int)parm)<<16) | (((unsigned int)x)&0xffffu)))
它适用于正数,例如:
int value = EMbed_PARM(76,1);
printf("%ld %ld %ld",value,value & 0xffffu,value >> 16);
给予:
65612 76 1
但是对于负的嵌入数字它失败了:
int value = EMbed_PARM(76,-5);
printf("%ld %ld %ld",value >> 16);
给予:
4294639692 76 4294967291
我做错了什么?
解决方法
您的宏不正确,因为参数没有正确地进行括号化,但这不会导致您观察到的问题,这是由于 Log.i("info message")
Log.d("debug message")
Log.w("warning message","warningOutPut")
Log.e("error message","AndACustomTag",exception)
格式:printf
期望 %ld
值而您传递 long
值。
这是修改后的版本:
int