例如,当说 if (-1>2) 时。这个条件是真的,因为有符号值 (-1) 被转换为我知道的无符号值。但我想知道的是它是如何转换的?如果它的值(value)改变了,它会是什么?
最佳答案
不,这不对。
两个整数常量(准确地说,如@KeithThompson 的评论中所指出的,前一个操作数是常量表达式,因为 -
在此上下文中充当一元运算符,改变其操作数的符号)都具有 int
类型(即 signed int
),因此为@amdn指出没有什么可以转换(因为操作数的类型完全相同), if
条件评估的结果是 0
(或假)。
您可能指的是 -1 > 2U
,这是一个不同的故事。由于通常的算术转换规则(通俗地称为整数提升), int
的操作数被提升为 unsigned
类型,产生一些可能大于 2U
的大数字(或在纯数学意义上只是 2)。更具体地说,unsigned
和 int
类型具有相同的等级,但由于这些规则,在这种情况下,有符号对应物(即操作数)被提升为无符号。
关于比较有符号数和无符号数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26962568/