C与C++中的整数(有符号、无符号)比较

int a = -1;
unsigned int b = 1;

std::cout << (a>b) << std::endl; // true

char c = -1;
unsigned char d = 1;
// 以下输出结果不固定,C编译器为true,C++编译器为false;
std::cout << (d>d) << std::endl;

char与unsigned char的比较结果不同的原因是:

C++中进行数据运算或者比较时,小于int类型的数据会先进行整形提升,即将数据类型提升到int,如果int无法装下则提升到unsigned int或者更大。

而C语言中则没有整形提升,因此两种编译器结果不一致。

注:以上代码是在菜鸟教程上进行的测试,不同的编译器可能会导致不同的行为,纯C编译也有可能会做整形提升的处理。

本篇文档主要提醒这种编码不规范的写法可能会引起的bug。

以下是C++的部分文档说明:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值