【问题标题】:Larger integer to smaller unsigned type conversion in CC中较大的整数到较小的无符号类型转换
【发布时间】:2009-04-16 11:04:45
【问题描述】:

我正在经历 k & r。我在理解第 197 页(第 A6 节)上的以下几行时遇到问题

整数转换:任何整数都是 转换为给定的无符号类型 找到最小的非负数 与那个一致的值 整数,模多一 可以表示的最大值 在无符号类型中。

任何机构都可以详细解释一下吗? 谢谢

【问题讨论】:

    标签: c


    【解决方案1】:

    这意味着只有低值位将被计数,而高位将被丢弃。

    例如:

    01111111 11111111 11110000 00001111
    

    当转换为 16 位 unsigned short 时:

    11110000 00001111
    

    这在数学上有效地表达为:

    target_value = value % (target_type_max+1)           ( % = modulus operator )
    

    【讨论】:

      【解决方案2】:

      通过找到与该整数一致的最小非负值,将任何整数转换为给定的无符号类型,该整数比无符号类型中可以表示的最大值大一模。

      让我们从后面一点一点地看:

      n 位宽的无符号类型可以表示的最大值是多少?

      2^(n) - 1.
      

      比这个值多一是什么?

      2^n. 
      

      转换是如何发生的?

      unsigned_val = signed_val % 2^n
      

      现在,为什么部分:该标准没有规定使用什么位表示。因此行话。在二进制补码表示中——这是迄今为止最常用的——这种转换不会改变位模式(当然,除非有截断)。

      有关详细信息,请参阅标准的积分转换。

      【讨论】:

        猜你喜欢
        • 2015-02-03
        • 2011-10-08
        • 2020-01-13
        • 1970-01-01
        • 1970-01-01
        • 2011-03-10
        • 2023-03-12
        • 1970-01-01
        • 2013-02-06
        相关资源
        最近更新 更多