请教

yuppy 2011-01-18 11:43:03

unsigned short -> unsigned long

unsigned short a;
unsigned long val;
int exp;

val = a & 0x1fff;
exp = (a>> 13) & 7;
while (exp-- > 0)
val *= 8;


为啥要这样实现. 直接强转不可以么?

谢谢了
...全文
143 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
feng4206yu 2011-01-18
  • 打赏
  • 举报
回复
while (exp-- > 0)
val *= 8;
这里我都看不懂...
yuppy 2011-01-18
  • 打赏
  • 举报
回复
yuppy 2011-01-18
  • 打赏
  • 举报
回复
大家都吃饭呢?
feng4206yu 2011-01-18
  • 打赏
  • 举报
回复
这个代码应该不单纯.
yuppy 2011-01-18
  • 打赏
  • 举报
回复

谢谢3楼的纳迦.和四楼..

我知道问题所在了.. 我没好好看注释.
赵4老师 2011-01-18
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)

让a分别取值0、1、32767
flysnowhite 2011-01-18
  • 打赏
  • 举报
回复
这个程序考察位运算操作。并不是简单进行unsigned short -> unsigned long运算。
unsigned short 前三位乘以3是要移动的位数,后13位是移动的主体。
比如,设a为0xffff,则val计算其后13位0x1fff,exp是前3位即7,然后将val左移21位,21+13-32=2,最高2位丢弃,结果为0xffe00000.
如果简单转换,则结果仍为0xffff。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧