zoukankan      html  css  js  c++  java
  • C语言符号扩展

    最近项目要求由Solaris 32-bit移植到Solaris 64-bit上。

    为防止意料外的符号扩展发生,在扩展时需使用显示转换。

    在此对c语言符号扩展规则总结如下。

    1 使用"="进行类型转换时,符号扩展规则如下。

       ·"="右端为无符号类型,向高精度扩展时一直为无符号扩展。

        例:unsigned int ui_a = 0x80000000;

              long l_a = ui_a;

              ui_a(32-bit unsigned int)向long(64-bit)转换时,ui_a转换为0x0000000080000000

                                                                                               (无符号扩展)

       ·"="右端为带符号类型,向高精度扩展时一直为有符号扩展。

      例:int i_a = 0x80000000;

              long l_a = i_a;

              i_a(32-bit int)向long(64-bit)转换时,ui_a转换为0xFFFFFFFF80000000

                                                                                               (有符号扩展)

    2 含有表达式的类型转换,规则如下。

       1)首先,由于含有表达式,首先进行整型提升。

           1). 只要一个表达式中用到了整型值,那么类型为char、short int活整型位域(这几者带符号或无符号均可)的变量,以及枚举类型的对象,都可以被放在这个整型变量的位置。
           2). 如果1)中的变量的原始类型值域可以被int表示,那么原值被转换为int;否则的话,转为unsigned int。

       2)然后按照上诉规则1("="类型转换),进行类型转换。

       例如 unsigned int ui_b = 0x40000;

              unsigned long ul_b = ui_b << 13;

              ui_b << 13,整型提升发生,ui_b提升为int型,然后进行左移运算,

              ui_b << 13计算结果为0x80000000(int),

              然后由"="进行类型转换,0x80000000(int)带符号扩展为0xFFFFFFFF80000000然后将其赋值给ul_b;

  • 相关阅读:
    Leetcode Binary Tree Preorder Traversal
    Leetcode Minimum Depth of Binary Tree
    Leetcode 148. Sort List
    Leetcode 61. Rotate List
    Leetcode 86. Partition List
    Leetcode 21. Merge Two Sorted Lists
    Leetcode 143. Reorder List
    J2EE项目应用开发过程中的易错点
    JNDI初认识
    奔腾的代码
  • 原文地址:https://www.cnblogs.com/cnlixl/p/3320434.html
Copyright © 2011-2022 走看看