无符号数的陷阱

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Gease_Gg/article/details/83548168

示例代码:

    #include <iostream>
    using namespace std;
    
    int main(){
    	int array[]={1,2,3,4,5};
    	int i=-1;
    	cout<<sizeof(array)<<endl;
    	if(i<=sizeof(array))
    		cout<<"yes";
    	else
    		cout<<"no";
    	return 0;
    } 

结果:
在这里插入图片描述

解释:

sizeof函数返回的值是unsigned类型的,而当unsigned和signed类型的做运算时,signed会被转化成unsigned类型。
而int i=-1;他的内存表示为0xffffffff,当转化成unsigned后,他的值就变成了2 32 ^{32} -1,自然就比20要大;

教训

有符合和无符号数混用很危险。尽量减少这种情况,一般使用int类型,如果必须使用unsigned,一定要记得类型转换。

猜你喜欢

转载自blog.csdn.net/Gease_Gg/article/details/83548168