unsigned类型与signed类型混用问题

当signed整型变量与unsigned整型变量进行比较时,signed变量会自动转换为unsigned,这可能导致意料之外的结果。例如,在判断一个signed变量是否大于等于一个vector容器的size时,即使signed变量为负数,也可能被解释为一个很大的正数,导致比较结果为真。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在unsigned整型变量与signed整型做算术和逻辑运算时,signed变量会自动转换成unsigned变量,所以会产生一些难以预料的结果。

以vector.size()为例子,容器的size_type为了能表示足够大的范围(因为vector.size()>=0)所以返回值为unsigned;

比如下边的例子:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
	int j=-1;
	
	bool a;
	
	vector <int > b;
	
	b.push_back(1);
	
	a=j>=b.size();
	
	cout<<a;
	return 0;
}

调试结果是:

j = -1;

b.size() = 1;

j>=b.size()  =  true;

在这里j = - 1 会自动转换为j=1;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值