我有代码:
signed short a = -32740;
float c;
float b;
b = (signed short)(a << 4);
c = a << 4;
printf("(signed short)(a << 4): %f\n", b);
printf("(a << 4): %f\n", c);
输出:
(signed short)(a << 4): 448.000000
(a << 4): -523840.000000
为什么在班次(c = a << 4;
)之后没有重置16个高级寄存器?
在带有32位linux的x86机器上执行程序。
答案 0 :(得分:5)
b =(签名简称)(a&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;,&lt;&lt; 4)
此行执行以下操作:
c = a&lt;&lt; 4;
此行执行以下操作:
'a'被声明为带符号的short这一事实并没有什么不同,因为所有计算总是使用int数据类型完成。我假设你的系统有32位整数。