|
印象中是将==两边统一作为无符号数进行比较,但是今天遇到一个问题,自己写代码测了一下,更不明白了:(
以下代码part1部分,是不同长度的有符号数与无符号数的比较,看似是以扩展到相同长度后各自内存的内容直接对比,但是从part2部分来看,结果却又不是这样。
请问究竟如何理解? 多谢!!!!!
#include <iostream>
using namespace std;
int main()
{
/* part 1*/
cout << "(bool)((unsigned long)-5(" << hex << (unsigned long)-5 << ")"
<< " == (unsigned short)-5)(" << hex << (unsigned short)-5 << "): "
<< (((unsigned long)-5 == (unsigned short)-5) ? "true" : "false") << endl;
cout << "(bool)((signed long)-5(" << hex << (signed long)-5 << ")"
<< " == (signed short)-5)(" << hex << (signed short)-5 << "): "
<< (((signed long)-5 == (signed short)-5) ? "true" : "false") << endl;
cout << "(bool)((unsigned long)-5(" << hex << (signed long)-5 << ")"
<< " == (unsigned short)-5)(" << hex << (signed short)-5 << "): "
<< (((unsigned long)-5 == (signed short)-5) ? "true" : "false") << endl;
cout << "(bool)((signed long)-5(" << hex << (unsigned long)-5 << ")"
<< " == (signed short)-5)(" << hex << (unsigned short)-5 << "): "
<< (((signed long)-5 == (unsigned short)-5) ? "true" : "false") << endl;
/*************************************************************/
/* part 2 */
signed short x = -1;
unsigned short y = 65535;
cout << "(bool)(x(" << hex << x << ") == y(" << hex << y << ") = "
<< (x == y ? "true" : "false") << endl;
x = 0xffff;
y = 0xffff;
cout << "(bool)(x(" << hex << x << ") == y(" << hex << y << ") = "
<< (x == y ? "true" : "false") << endl;
cin.get();
}
|
|