zoukankan      html  css  js  c++  java
  • 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();显式赋值!

  • 相关阅读:
    关于python3在centOS7下源码安装的配置
    nginx服务器多虚拟主机配置
    完全数
    高精度计算组合数
    算法竞赛入门经典第六章总结
    线段树
    奶牛
    算法竞赛入门经典第五章总结
    优先队列的使用方法
    放魔法石的游戏
  • 原文地址:https://www.cnblogs.com/impw/p/15757570.html
Copyright © 2011-2022 走看看