我需要将两个有符号的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++)? 最佳答案 在这种情况下,您的lsb包含0xfff3。当您将其与1 试试short combined = (msb << 8 ) | (lsb & 0xff);关于C++如何将两个带符号的8位数字组合为一个16位的short?无法解释的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8258398/
10-10 23:02