问题描述:本人C++新手,在运行某段C++代码时,发现某个值为-1的变量和另一个值为2的变量比较时,结果竟然是 -1 > 2,以代码为例:
int j=-1;
string needle="hello";
if(j<needle.length())
cout<<"j<needle.length()";
else
cout<<"j >= needle.length()";
结果输出为 “j >= needle.length()”。
搞了半天没明白为什么,然后查了一下C++中string类的length()函数,发现该函数返回值为unsigned类型。int类型的数在和unsigned类型的数做比较时,C++会将两者统一看做unsigned类型的数进行比较。而int型的负数的符号位为1,看做unsigned类型的话就是最高位为1,而2的二进制表示的最高位为0, 自然就更“小”。