【发布时间】:2012-01-05 16:50:38
【问题描述】:
我需要将两个带符号的 8 位 _int8 值组合成一个带符号的短(16 位)值。重要的是不要丢失标志。
我的代码是:
unsigned short lsb = -13;
unsigned short msb = 1;
short combined = (msb << 8 )| lsb;
我得到的结果是-13。但是,我希望它是499。
对于以下示例,我使用相同的代码得到了正确的结果:
msb = -1; lsb = -6; combined = -6;
msb = 1; lsb = 89; combined = 345;
msb = -1; lsb = 13; combined = -243;
但是,msb = 1; lsb = -84; combined = -84; 我期望428。
似乎如果 lsb 为负而 msb 为正,就会出现问题! 我的代码有什么问题?计算机是如何得到这些意想不到的结果的(Win7、64位和VS2008 C++)?
【问题讨论】:
-
数字以en.wikipedia.org/wiki/Two%27s_complement 表示。这就是当您 OR 2 2 的补码时会发生的情况。不要。
-
为什么您的“有符号 8 位值”存储在
unsigned short中?