例如说if(-1> 2)。这条件是真的,因为有符号值(-1)被转换为我知道的无符号值。但我想知道的是它是如何转换的?如果它的价值发生了变化,它会是什么?
答案 0 :(得分:4)
例如说if(-1> 2)。这种情况是真的,因为 签名值(-1)转换为无符号值,我知道。
不,不是。
两个整数常量(确切地说,如@ KeithThompson所指出的那样,前一个操作数是常量表达式,因为-
在此上下文中充当一元运算符,它改变了其操作数的符号)键入int
(即signed int
),因为@amdn指出没有任何内容可以转换(因为操作数'类型完全相同),if
&#39的结果;条件评估为0
(或错误)。
你可能意味着-1 > 2U
,这是一个不同的故事。由于通常的算术转换规则(通俗地称为整数促销),int
的操作数被提升为unsigned
类型,产生一些大数字,这很可能大于2U
(或纯粹数学意义上的2)。更具体地说,unsigned
和int
类型具有相同的等级,但由于这些情况下签名的对应物(即操作数)中的这些规则被提升为无符号。