0

我正在使用short(并且我必须使用short 进行赋值,否则我只会使用int)来扫描0-31之间的值,然后使用单个整数来存储这些扫描值中的6个。

这是我到目前为止所拥有的:

int vals = 0;
short ndx, newVal;

/* more printing/scanning and error checking in between */

newVal = newVal << (5*ndx);
vals = vals | newVal;

当我尝试在点 4 或 5 放置一个有效值时,它不起作用,只是保持 0 ......我想知道这是否是因为 short 只有 2 个字节长,所以按位左移只是摆脱了整个价值?如果这是问题,我可以添加某种演员来解决它吗?

4

1 回答 1

0

这正是你的想法。您使用了按位移位,然后将结果分配给一个短变量 (newVal)。当你这样做时,即使计算是在 32 位中完成的,结果仍然会被截断,并且你只会得到最低有效的 16 位 0。

如果您想避免使用 int,只需完全删除 newVal 变量,然后计算vals = vals | ((something) << (some other thing));

于 2013-02-15T14:37:56.263 回答