比较整数给出了奇怪的结果

时间:2012-11-01 14:55:55

标签: c++

我正试图绕过通常的算术转换并尝试测试:

(static_cast<unsigned char>(std::numeric_limits<unsigned char>::max()) > static_cast<signed char>(-1))

这个评估为true,这没关系,但根据算术转换,它应该导致false(最后一个子弹):

  
    

对操作数执行整数提升,如下所示:

  
     

如果任一操作数的类型为unsigned long,则另一个操作数为   转换为unsigned long类型。

     

如果未满足先前条件,并且任一操作数的类型为long   和另一个unsigned int类型,两个操作数都转换为   输入unsigned long。

     

如果不满足前两个条件,并且任何一个操作数都是   long类型,另一个操作数转换为long类型。

     

如果不满足前面三个条件,并且任何一个操作数   是unsigned int类型,另一个操作数转换为type   unsigned int。

     

如果不满足上述条件,则两个操作数均为   转换为int。

最后一个子弹说,如果没有满足其他任何条件,则两个操作数都将被赋予int类型。在这个unsigned char(max_char)之后将只有一些填充了一些模式,而signed char(-1)将只有一些填充了一些模式。这将意味着1> 1 ==假,但我得到了真实。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

你说的是最后一个项目符号是正确的,所以两个操作数都转换为int类型。左侧是(unsigned char)255,右侧是(signed char)-1。由于255和-1都可以表示为int,因此它们分别转换为(int)255(int)-1,并且由于255大于-1,因此返回true