返回C中的按位运算类型

Ble*_*mer 8 c type-conversion

我有一个int(32)值Val打包形式

----------------------------------------
| 32-XXXXXXXXX-16 | 15-short-int-val-0 |
----------------------------------------
Run Code Online (Sandbox Code Playgroud)

Val如果我执行操作,从中提取短整数值时

short temp = Val & 0x0000FFFF;
Run Code Online (Sandbox Code Playgroud)

什么是操作的返回类型Val & 0x0000FFFF?我是否需要输入值以(short)(Val & 0x0000FFFFF)存储正确的数据temp

由于我假设十六进制数字本身被视为无符号整数,因此出现了疑问.

上述操作与上述操作有何不同

short temp = Val & 0xFFFF;
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 1

让我们假设32-bit int16-bit short8-bit char

short temp = Val & 0x0000FFFF;
Run Code Online (Sandbox Code Playgroud)

Val属于 类型int。这也与 type0x0000FFFF相同。0xFFFFint

该表达式Val & 0x0000FFFF也是类型,并在对象初始化时int隐式转换为。shorttemp

所以:

操作 Val & 0x0000FFFF 的返回类型是什么?

往上看,int

我是否需要将值类型转换为 (short)(Val & 0x0000FFFFF) 才能将正确的数据存储在 temp 中?

参见上文,否,因为表达式short在对象初始化时隐式转换为temp

之所以产生疑问,是因为我假设十六进制数字本质上被视为无符号整数。

这是一个错误的假设,因为这里0x0000FFFF是有符号类型int