首页 > 技术文章 > c++ vector size()18446744073709551615 bug

impw 2022-01-02 15:37 原文

今天打力扣周赛,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();显式赋值!

推荐阅读