c++ vector size()18446744073709551615 bug
今天打力扣周赛,c++写了一个判断vector大小的代码,当vector为空时,总是通不过,结果打印出来一看出现了'18446744073709551615'这个奇怪的数。
vector<int> n;
cout<<n.size()<<" "<<n.size()-1;//0 18446744073709551615
查了一下大概原因
64位2进制的+1
0000000000000000000000000000000000000000000000000000000000000001b
反码One's Complement (OCP)
1111111111111111111111111111111111111111111111111111111111111110b
补码Two's Complement (TCP)signed 64 bit integer
1111111111111111111111111111111111111111111111111111111111111110b (-1 in OCP)
+ 1b (1)
-----------------------------------------------------------------
1111111111111111111111111111111111111111111111111111111111111111b (-1 in TCP)
2进制的2^64 - 1 unsigned 64bit integer
1111111111111111111111111111111111111111111111111111111111111111b
n.size()是无符号整数,所以把-1强行转换成了无符号整数就得到了神奇的
18,446,744,073,709,551,615
所以以后用size()时尽量int m=n.size();
显式赋值!