直接上代码:

#include <iostream>
#include <vector> using namespace std; int main()
{
vector<string> vctStr;
vctStr.push_back("Hello");
vctStr.push_back("World"); cout<<"VctSize: "<<vctStr.size()<<endl; // VctSize: 2 int iType = -1; if (iType >= vctStr.size() )
{
cout<<"Amazing ……"<<endl; // -1 竟然大于2 ?!
cout<<"iType: "<<iType<<", size: "<<vctStr.size()<<endl; } return 0;
}

执行结果:

欧耶,-1 >=2 就这样出现了……

我一開始认为计算机是不是脑残了,会有这样的结果?

我怀疑是 vector.size 的返回值有问题,查文档,发现原来返回类型是 size_type  也就是 unsigend int, 这下子。知道是怎么一回事了。

这样測试,结果就明了了,再上代码:

#include <iostream>
#include <vector> using namespace std; int main()
{
vector<string> vctStr;
vctStr.push_back("Hello");
vctStr.push_back("World"); cout<<"VctSize: "<<vctStr.size()<<endl; // VctSize: 2 int iType = -1; if (iType >= vctStr.size() )
{
cout<<"Amazing ……"<<endl; // -1 竟然大于2 ?!
cout<<"iType: "<<iType<<", size: "<<vctStr.size()<<endl;
cout<<"Here!: iType:"<<(unsigned int)(iType)<<endl; // 新加一行信息打印, 看到这里就懂了。 } return 0;
}

上图:

计算机并没有脑残,仅仅是在比較的时候,默认做了类型转换,将负数进行了转换

即 if (iType >= vctStr.size() ) 实际上应该是   if ( (unsigned int)iType >= vctStr.size() )。 这种话,肯定是大于2的了。



为此我还专门上网查找了关于 负数在计算机中的存储问题。看完之后,明确了怎样求一个常见数据类型的最大值问题

再上代码:

#include <iostream>
#include <vector> using namespace std; int main()
{
int i = -1;
cout<<"unsigned int max: "<< (unsigned int)(i) <<endl;
cout<<" int max: "<< (unsigned int)(i)/2<<endl; return 0;
}

图:

记录一个奇妙的Bug, -1 &gt;= 2 ?的更多相关文章

  1. FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG

    发现FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG,提交的表名大小写是敏感的. 只要有一个表名字母的大小写不匹配,ORACLE就会认为是一个不认 ...

  2. salesforce零基础学习(一百一十五)记一个有趣的bug

    本篇参考:https://help.salesforce.com/s/articleView?language=en_US&type=1&id=000319486 page layou ...

  3. 一个iOS6系统bug+一个iOS7系统bug

    先看实际工作中遇到的两个bug:(1)iPhone Qzone有一个导航栏背景随着页面滑动而渐变的体验,当页面滑动到一定距离时,会改变导航栏上title文本的颜色,但是有一个莫名其妙的bug,如下:

  4. 记录一个bootstrap惨痛的错误

    记录一个bootstrap的错误,这个错误因为我删除了一个class就导致了页面上显示的错误,这是一个惨痛的教训,特此记录,提醒自己在做前端的修改时,一定要慎之又慎.如果真的要做改动,改完之后也要测一 ...

  5. step_by_step_记录一个javascript字符串处理问题

    记录一个javascript字符串处理的问题 这一天下班,技术QQ群里的大神提出了一个问题,带着问题去思考. ? '---9890.999008-555555-55555555----' 对于这样的字 ...

  6. pycharm下: conda installation is not found ----一个公开的bug的解决方案

    pycharm  conda installation is not  found ----一个公开的bug的解决方案 pycharm+anaconda 是当前的主流的搭建方案,但是常出现上述问题. ...

  7. 【Todo】C++类 & 通用面试题分析记录 & 最难的bug

    1. the most difficult bug u fixed and how u solved this problem.. 解决过很多疑难bug.最困难的分为两类.一类是并发.多线程类的,因为 ...

  8. 一个神奇的bug:OOM?优雅终止线程?系统内存占用较高?

    摘要:该项目是DAYU平台的数据开发(DLF),数据开发中一个重要的功能就是ETL(数据清洗).ETL由源端到目的端,中间的业务逻辑一般由用户自己编写的SQL模板实现,velocity是其中涉及的一种 ...

  9. 记录一个前端bug的解决过程

    人在江湖飘,哪能不挨刀. 我挨了重重一bug.严格来讲这可能是我职业生涯以来的首个悲惨经历,因为凭我的知识储备和经验,基本上任何可重现的bug都是可解的.然而这个bug却困扰了我三个月之久,它具有以下 ...

随机推荐

  1. import详解

    试想一下 在工作中今年在一个项目中可能会导入某一个目录下的模块文件,那这个时候怎么样才能让Python解释器能够找到该模块进行调用呢? - 将这个模块拷贝一份到当前使用目录下. 这种方式让模块太冗余 ...

  2. 《Java并发编程实战》学习笔记

    第2章 线程安全性 正确性: 某个类的行为与其规范完全一致. 2.1线程安全: 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或 ...

  3. debian 更换sh的默认链接为bash

    https://blog.csdn.net/mudongliangabcd/article/details/43458895

  4. 【转】jmeter入门教程- Jmeter教程及技巧汇总

    https://blog.csdn.net/zouxiongqqq/article/details/72843500

  5. [ThinkPHP] 从一个表中获得栏目对应的ID,从另一个表获得属于这些栏目的文章

    public function index(){ $cate = 1; $query = M('Cate')->field('id')->where(array('id'=>$cat ...

  6. Ubuntu 14.04 安装JDK 8

    1.安装JDK,参考 1.下载 JDK 8 从http://www.oracle.com/technetwork/java/javasebusiness/downloads/选择下载JDK的最新版本 ...

  7. Python3 数字

    layout: post title: Python3 数字 author: "luowentaoaa" catalog: true tags: mathjax: true Pyt ...

  8. 线段树+Dfs序【p2982】[USACO10FEB]慢下来Slowing down

    Description 每天Farmer John的N头奶牛(1 <= N <= 100000,编号1-N)从粮仓走向他的自己的牧场.牧场构成了一棵树,粮仓在1号牧场.恰好有N-1条道路直 ...

  9. java客户端编辑为win中可执行文件(exe4j)

    exe4j 网址: http://www.ej-technologies.com/products/exe4j/overview.html

  10. [BZOJ1143][CTSC2008]祭祀river(Dilworth定理+二分图匹配)

    题意:给你一张n个点的DAG,最大化选择的点数,是点之间两两不可达. 要从Dilworth定理说起. Dilworth定理是定义在偏序集上的,也可以从图论的角度解释.偏序集中两个元素能比较大小,则在图 ...