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;

  • 相关阅读:
    max key length is 1000 bytes
    205 Reset Content
    The Path Attribute
    track message forwards, avoiding request loops, and identifying the protocol capabilities of all senders along the request/response chain
    test hypertext links for validity, accessibility, and recent modification
    ES6 will change the way you write JS code.
    ECMAScript Web APIs node.js
    Symbols
    HTML/Elements/base
    frag General URL components
  • 原文地址:https://www.cnblogs.com/cnlixl/p/3320434.html
Copyright © 2011-2022 走看看