考虑下面的C函数:
int funi(unsigned word) { return (int) ((word « 24) » 24); } int fun2(unsigned word) { return ((int) word « 24) » 24; }
假设在一个采用补码运算的机器上以32位程序来执行这些函数。还假设有符号数值的右移是算术右移,而无符号数值的右移是逻辑右移。
A. 填写下表,说明这些函数对几个示例参数的结果。你会发现用十六进制表示来做会更方便,只要记住十六进制数字8到F的最高有效位等于1。
w | funl(w) | fun2(w) |
0x00000076 |
|
|
0x87654321 |
|
|
0x000000C9 |
|
|
0xEDCBA987 |
|
|
B. 用语言来描述这些函数执行的有用的计算。