c/c++语言开发共享Chex常数型

我写了以下c代码:

#include  int main () { printf("%dn", -1 >> 8); return 0; } 

我使用-m32标志在x86_64上使用gcc 4.6.3编译此代码。 我按照我的预期打印出-1,使用二进制补码表示算术运算得到-1。

现在,如果我改写

 printf("%dn", 0xFFFFFFFF >> 8); 

我得到16777215.我本来期望这个常量被解释为一个int(有符号),然后转换为算术,这将再次导致-1。 我查看了最新的C标准,我似乎无法理解为什么会这样。 有任何想法吗?

    根据C99标准(6.4.4.1),hex常量将是此列表中可以表示它们的第一个类型:

     int unsigned int long int unsigned long int long long int unsigned long long int 

    hex文字0xFFFFFFFF不适合int (可以将值-0x800000000x7FFFFFFF ),但是适合unsigned int ,因此其类型将是无符号的。 将无符号值0xFFFFFFFF右移8可得到16777215

    未修饰的整数文字具有不同的类型,具体取决于它们是否为十进制(C11中的6.4.4.1/5,C ++ 11中的表6):

    右移负整数是实现定义的,你碰巧得到了符号扩展。 右移无符号值简单除以2。

      以上就是c/c++开发分享Chex常数型相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560538.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐