关于int和unsigned int的一些运算

今天去了一家游戏公司笔试,其中有一题引起我的注意。

	int a = -1;
	unsigned int b = 2;
	unsigned short c = 3;

	cout<<(a<b)<<endl;
	cout<<(a<c)<<endl;
	cout<<(b<c)<<endl;

然后就是问你输出什么及其理由。

然后我回来之后就是敲代码验证。事实说明我是才对了。

根据我搜回来的资料显示,int和usigned int想加减的话,会先同意转换成unsigned int再进行运行。先看看(a<b),根据上面分析,它首先会转换成无符号数,也就是很大很大的数。

然后就是unsigned short 和int 的运算了。资料显示是会转换成int,然后再运算。所以a<c是必然的。

关键点来了,unsigned int 和unsigned short 怎么办?很简单,就是变为前者咯。不过这里值得注意就是,b<c是成立的。毕竟2小于3.但是b-c就大于0了。这就是由无符号造成的。


不要问我怎么知道两个数怎么转换。我不会告诉你我有个小办法的。

cout<<typeid(a).name()<<endl;     //就会输出a的类型。 如 int


通过上面的小测试,我总结了一下两点。

1.  同类型的变量,会倾向于无符号。(int  --->  unsigned)

2.  不同类型的变量。会倾向于范围比较大的那位。(unsigned short---->>>int),位小的会补位。


上面的又可以总结为一条:向大的倾向。(有符号比无符号最大范围大一倍嘛,哈哈)。


----------------------------the end------------------------------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值