如何在 4 字节有符号整数的高 16 位中嵌入一个数字?

问题描述

我想要做的是将一个数字(可能带有符号)嵌入到 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