val = a & 0x1fff;
exp = (a>> 13) & 7;
while (exp-- > 0)
val *= 8;
为啥要这样实现. 直接强转不可以么?
谢谢了
...全文
1437打赏收藏
请教
unsigned short -> unsigned long unsigned short a; unsigned long val; int exp; val = a & 0x1fff; exp = (a>> 13) & 7; while (exp-- > 0) val *= 8; 为啥要这样实现. 直接强转不可以么? 谢谢了
这个程序考察位运算操作。并不是简单进行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。