unsigned和signed类型转换

今天又是知识增加的一天,让我向大家分享新的知识吧。直接开干!!!

int app(int a){
 	static int b = 3;
	 if(a>0) return a*app(--b);
 	else return 2;
}
int main(){
 	unsigned int a = 4;
 	int b = -6;
 	int res = 0;
 	if(a>b){
 		int a = 4; 
 		res = app(a);
 	}else{
		int b = 3; 
 		res = app(b);
 }
	 printf("%d\n",res);
	 return 0;
}

答案为:12。

1.这题答案其实有两种选择,就是看选择哪个分支执行程序了。if为4* 2 * 1* 2=16 else为3 * 2 * 1 * 2=12.让我来逐步分析过程。

2.首先,我们可以发现

unsigned int a=4;
int b=-6;

一眼看过去 ,我们可以明显发现4>-6 ,所以我果断选择了if语句,但a和b两种的类型不同,这就对结果产生了影响。

  3 int main(){
  4     unsigned int a=4;
  5     int b=-6;
  6     if(a>b){
  7         printf("a>b\n");
  8     }else{
  9         printf("a<b\n");
 10     }
 11 
 12     return 0;
 13 }

答案为:
a<b

这是为什么呢?
	其实是因为unsigned和signed混合运算时会转化为
unsigned类型
	int b=-6;
    printf("%u\n",b);//  4294967290

明显b>a

3.由上我们可知 ,我们选择else分支,

1).res=3 * app(2);
2).res=3 * 2 * app(1);
3).res=3 * 2 * 1 * app(0);
4).res=3 * 2 * 1 * 2; //12
如果大家具体的递归不懂可以私聊我,我到时候私聊

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值