记录一个奇妙的Bug, -1 >= 2 ?
直接上代码:
#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 >= 2 ?的更多相关文章
- FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG
发现FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG,提交的表名大小写是敏感的. 只要有一个表名字母的大小写不匹配,ORACLE就会认为是一个不认 ...
- salesforce零基础学习(一百一十五)记一个有趣的bug
本篇参考:https://help.salesforce.com/s/articleView?language=en_US&type=1&id=000319486 page layou ...
- 一个iOS6系统bug+一个iOS7系统bug
先看实际工作中遇到的两个bug:(1)iPhone Qzone有一个导航栏背景随着页面滑动而渐变的体验,当页面滑动到一定距离时,会改变导航栏上title文本的颜色,但是有一个莫名其妙的bug,如下:
- 记录一个bootstrap惨痛的错误
记录一个bootstrap的错误,这个错误因为我删除了一个class就导致了页面上显示的错误,这是一个惨痛的教训,特此记录,提醒自己在做前端的修改时,一定要慎之又慎.如果真的要做改动,改完之后也要测一 ...
- step_by_step_记录一个javascript字符串处理问题
记录一个javascript字符串处理的问题 这一天下班,技术QQ群里的大神提出了一个问题,带着问题去思考. ? '---9890.999008-555555-55555555----' 对于这样的字 ...
- pycharm下: conda installation is not found ----一个公开的bug的解决方案
pycharm conda installation is not found ----一个公开的bug的解决方案 pycharm+anaconda 是当前的主流的搭建方案,但是常出现上述问题. ...
- 【Todo】C++类 & 通用面试题分析记录 & 最难的bug
1. the most difficult bug u fixed and how u solved this problem.. 解决过很多疑难bug.最困难的分为两类.一类是并发.多线程类的,因为 ...
- 一个神奇的bug:OOM?优雅终止线程?系统内存占用较高?
摘要:该项目是DAYU平台的数据开发(DLF),数据开发中一个重要的功能就是ETL(数据清洗).ETL由源端到目的端,中间的业务逻辑一般由用户自己编写的SQL模板实现,velocity是其中涉及的一种 ...
- 记录一个前端bug的解决过程
人在江湖飘,哪能不挨刀. 我挨了重重一bug.严格来讲这可能是我职业生涯以来的首个悲惨经历,因为凭我的知识储备和经验,基本上任何可重现的bug都是可解的.然而这个bug却困扰了我三个月之久,它具有以下 ...
随机推荐
- ubuntu 16.04 qtcreator 闪退
当用QtCreator 进行代码自动补全时,比如编写ros代码,ROS_INFO时候就会出现闪退,后面按照 http://doc.qt.io/qtcreator/creator-clang-codem ...
- 架设Hmailserver+webmail邮件服务器
架设Hmailserver+webmail邮件服务器 在安裝Hmailserver前先安裝Apache.php.mysql,如果你想懶點直接到http://www.phpnow.org下載phpn ...
- [mysql] 表去重
select *, count(distinct content) from comment2 group by content
- poj2253 最短路变形
题目连接:http://poj.org/problem?id=2253 Description Freddy Frog is sitting on a stone in the middle of a ...
- 51nod 1283 最小周长【注意开根号】
1283 最小周长 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 一个矩形的面积为S,已知该矩形的边长都是整数,求所有 ...
- HYSBZ - 2038 小Z的袜子 (莫队算法)
A1206. 小Z的袜子 时间限制:1.0s 内存限制:512.0MB 总提交次数:744 AC次数:210 平均分:44.44 将本题分享到: 查看未格式化的试题 ...
- tensorflow bilstm官方示例
''' A Bidirectional Recurrent Neural Network (LSTM) implementation example using TensorFlow library. ...
- hexo 的错误
错误如下 Connection to github.com closed by remote host. fatal: The remote end hung up unexpectedly erro ...
- Exercise01_09
public class S{ public static void main(String[] args){ double w=4.5; double h=7.9; double d; double ...
- JavaScript学习系列之执行上下文与变量对象篇
一个热爱技术的菜鸟...用点滴的积累铸就明日的达人 正文 在上一篇文章中讲解了JavaScript内存模型,其中有提到执行上下文与变量对象的概念.对于JavaScript开发者来说,理解执行上下文与变 ...