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();显式赋值!

  • 相关阅读:
    JavaScript if 条件语句
    JavaScript while 循环
    JavaScript for 循环
    JavaScript 字典
    JavaScript 数组
    JavaScript 函数
    JavaScript 定时器
    JavaScript 字符串操作
    CEF js调用C#封装类含注释
    多网卡的环境下的发包
  • 原文地址:https://www.cnblogs.com/impw/p/15757570.html
Copyright © 2011-2022 走看看