-2比2小吗? C++ 中 unsigned int 和 int的比较

831 篇文章 15 订阅
300 篇文章 0 订阅

一,问题的来源

在使用stl的时候,经常要遍历容器。遍历容器有几种方法,一种就是使用下标遍历。

在使用下标遍历的时候,经常要用到一个遍历的循环变量,往往这个变量一顺手就写成了:

1:  int i = 0;

这个i在一般的情况下是没有问题的,然后最近突发奇想,想像python那样,能够支持负的下标。

比如v是一个vector,v[-2]表示后两个元素。

 

二,问题的描述

假设有这么一段简单的程序:

1: vector< int> numbers; //声明一个vector;  2: numbers.push_back(1);  3: numbers.push_back(2); //压入两个数,让他的size不为0  4:   5:  int numIndex =-2; //声明一个有符号的整数  6:  if(numIndex&lt;numbers.size()){ //-2跟2比较  7: cout&lt;&lt; "true"&lt;&lt;endl;  8: } else9: cout&lt;&lt; "false"&lt;&lt;endl;  10: }

-2跟2比较输出的是 false,也就是-2要大于2.

这个是怎么一回事呢。

 

三,问题的原因

其实上一段程序编译的时候会有一个常见的编译器warning:

“warning C4018: “&lt;”: 有符号/无符号不匹配”,通常warning我们也不太在意,但是指不定

什么时候,就耗掉你几个小时。

这个waring就是说,在比较的时候,两边的符号不一致。

在式子:numIndex&lt;numbers.size() 中

numIndex是有符号的,numbers.size()是无符号的。在有符号整数和无符号整数比较的时候,

有符号的整数会向无符号整数转换,这个就是原因。

 

四,问题的思考

那有符号的numIndex转换成无符号的的整数到底是多少呢?

1:  unsigned  int unumIndex = numIndex; //转换  2: cout&lt;&lt; "unsigned value of -2:"&lt;&lt;unumIndex&lt;&lt;endl;

其结果是

-2:4294967294

也就是说-2转换成了4294967294,这个数当然比2要大。

那为什么是这个数呢?

因为C++中,int的大小是4个字节,也就是32位。2^32-2也就是这个数。

更多系列文章敬请访问:我的个人博客 第九兔

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值