【问题标题】:Signed to unsigned conversion有符号到无符号转换
【发布时间】:2011-10-25 04:51:45
【问题描述】:

谁能解释一下为什么下面的代码会输出它的作用:

char c = -1;
cout << (c << 8) << endl;
cout << ((unsigned char) c << 8) << endl;
cout << (c << 24) << endl;
cout << ((unsigned char) c << 24) << endl;

输出:

-256
65280
-16777216
-16777216

我认为转换为 unsigned char 只会改变位的解释方式。但是,左移 8 时,结果却发生了变化。奇怪的是,左移 24 时,结果似乎并非如此。

【问题讨论】:

    标签: bit-manipulation unsigned signed


    【解决方案1】:

    在每种情况下,角色都会在轮班前晋升为int

    在您的平台上,char 已签名,因此 c-1,但 (unsigned char)(c) 是 255。

    所以你看到了:

    • -1 &lt;&lt; 8
    • 255 &lt;&lt; 8
    • -1 &lt;&lt; 24
    • 255 &lt;&lt; 24

    请注意,后者会溢出并换行(在您的平台上)。它不同于255U &lt;&lt; 24,后者是4278190080。要实现这一点,你必须说(unsigned int)(unsigned char) c &lt;&lt; 24

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 2011-05-30
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2013-07-23
      相关资源
      最近更新 更多