记录一个奇妙的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却困扰了我三个月之久,它具有以下 ...
随机推荐
- C#格式化时间,货币
1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...
- USACO 2012 Feb Cow Coupons
2590: [Usaco2012 Feb]Cow Coupons Time Limit: 10 Sec Memory Limit: 128 MB Submit: 349 Solved: 181 [Su ...
- 如果想从jenkins直接生成docker镜像,并推送到harbor中,最简单的脚本如何实现?
如果不考虑意外, 第一版最简单的构思如下: #!/usr/bin/env python # -*- coding: utf-8 -*- import getopt, sys import subpro ...
- JS监听页面滚动到底部事件
废话不说,直接上代码,放心我这个是最好的,直接放到js脚本里,直接生效: $(window).scroll(function(){ var scrollTop = $(this).scrollTop( ...
- Windows和Ubuntu平台Android +JAVA 环境搭建
NOTE 测试的时候,尤其是移动端的测试,需要搭建JAVA和Andriod环境: appium和macaca都需要这两个环境: Q&A Macaca doctor 发现没有platforms这 ...
- CSU 1337 搞笑版费马大定理【优化枚举】
费马大定理:当n>2时,不定方程an+bn=cn没有正整数解.比如a3+b3=c3没有正整数解.为了活跃气氛,我们不妨来个搞笑版:把方程改成a3+b3=c3,这样就有解了,比如a=4, b=9, ...
- sed replace HEX sequence in your binary file:
Here is how to replace a HEX sequence in your binary file: $ sed 's/\x0D\x4D\x53\x48/\x0D\x0A\x4D\x5 ...
- Xamarin XAML语言教程ContentView视图作为自定义视图的父类
Xamarin XAML语言教程ContentView视图作为自定义视图的父类 自定义视图的父类:ContentView视图可以作为自定义视图的父类. [示例14-2]以下将自定义一个颜色视图.具体的 ...
- Oracle的锁
Oracle数据库中的锁机制 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数 ...
- [BZOJ 1799] self 同类分布
Link: BZOJ 1799 传送门 Solution: 一句话的题目,看得爽,做得烦 一般这类和数位相关的都是数位$dp$吧 不过一开始还是感觉不太可做,毕竟每个数模数不同 但要发现,模数最高也只 ...