首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >左移魔术

左移魔术
EN

Stack Overflow用户
提问于 2011-09-25 00:26:47
回答 1查看 219关注 0票数 2

我有代码:

代码语言:javascript
复制
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);

输出:

代码语言:javascript
复制
(signed short)(a << 4): 448.000000
(a << 4): -523840.000000

为什么16个高级寄存器在移位后未复位(c = a << 4;)?

在使用32位linux的x86机器上执行的程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-25 00:32:57

符号b=(

short)(a << 4);

此行执行以下操作:

  1. Calculate (一个<< 4)。计算是用整数完成的(默认在C中)。结果是:通过转换为-523840
  2. Truncate short,将结果(通过丢弃位)转换为16位。(结果为448)
  3. 将结果转换为浮点型(值不变)

c=a << 4;

此行执行以下操作:

  1. Calculate (一个<< 4)。计算是用整数完成的(默认在C中)。结果是:-523840
  2. convert结果为float (值不变)

将'a‘声明为带符号的短整型并没有什么区别,因为所有的计算都是使用int数据类型完成的。我假设你的系统有32位整数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7540251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档