关于C语言中的无符号数和有符号数

时间:2021-01-13 01:20:18

  无符号数和有符号数是不能停止比拟运算的, 否则能够会呈现意想不到的错误, 234都不是我们想像中的结果。 在C语言中, 有符号数会被隐含的转换成无符号数, 然后停止比拟运算。 其底层的二进制表示没有改动, 这样,

  首先分析一下2:

  -1的二进制补码表示是32个1。 而0U的二进制补码表示是32个0. 在比拟的时分, -1被当做无符号数, 32个1要大于32个0. 所以, 无符号数和有符号数在停止比拟的时分, 如果数值在边界上,

  看上面的一段顺序:

  如果len为0, 那么这段代码将不会前往0. 而是段错误。

  另外, 当在无符号数和有符号数之间停止类型转换时, 不同的转换顺序会失掉不同的结果。 而第二个是0xFFFFFFFF. 而第二个右移运算高位补1.