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

最佳答案



不,这不对。

两个整数常量(准确地说,如@KeithThompson 的评论中所指出的,前一个操作数是常量表达式,因为 - 在此上下文中充当一元运算符,改变其操作数的符号)都具有 int 类型(即 signed int ),因此为@amdn指出没有什么可以转换(因为操作数的类型完全相同), if 条件评估的结果是 0 (或假)。

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

关于比较有符号数和无符号数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26962568/

10-11 22:58
查看更多