比较有符号和无符号的数字

时间:2014-11-16 22:03:19

标签: c

例如说if(-1> 2)。这条件是真的,因为有符号值(-1)被转换为我知道的无符号值。但我想知道的是它是如何转换的?如果它的价值发生了变化,它会是什么?

1 个答案:

答案 0 :(得分:4)

  

例如说if(-1> 2)。这种情况是真的,因为   签名值(-1)转换为无符号值,我知道。

不,不是。

两个整数常量(确切地说,如@ KeithThompson所指出的那样,前一个操作数是常量表达式,因为-在此上下文中充当一元运算符,它改变了其操作数的符号)键入int(即signed int),因为@amdn指出没有任何内容可以转换(因为操作数'类型完全相同),if&#39的结果;条件评估为0(或错误)。

你可能意味着-1 > 2U,这是一个不同的故事。由于通常的算术转换规则(通俗地称为整数促销),int的操作数被提升为unsigned类型,产生一些大数字,这很可能大于2U(或纯粹数学意义上的2)。更具体地说,unsignedint类型具有相同的等级,但由于这些情况下签名的对应物(即操作数)中的这些规则被提升为无符号。