首页 > 其他 > 详细

每日一练4

时间:2020-04-10 19:56:06      阅读:60      评论:0      收藏:0      [点我收藏+]

#include<stdio.h>
void main()
{
unsigned char a=6;
int b=-20;
(a+b)?puts(">6"):puts("<=6");
return 0;
}
a+b 为非0数 就是真 所以输出 ">6"
楼主应该想问的是(a+b>6)?puts(">6"):puts("<=6");的输出结果吧

有个基础 知识 类型的隐式转换 就是 char 必转 int
当计算 a+b 的 时候 unsigned char a 先转换为 int 还是 6
a+b 的 结果一定为int 值 为 -14 输出 "<=6"


如果说 unsigned char a = -20; int b = 6 结果?
unsigned char a 转换为 int 为 236 原因是 unsigned char 补齐位 是补0
a+b 返回的类型一定是int 且 结果 肯定是个 大于6的数 输出 ">6"

另一种情况 unsigned int a = 6; int b= - 20; 其实 肯定大于0的
a是 unsigned int 不用转换 , b需要转换 因为要和 a的类型 对齐;
int b 转换为 unsigned int 是个很大的数
两个unsigned int 相加 结果也一定为 无符号型 整数 输出 >6 也就不为奇怪了

技术分享图片

 

每日一练4

原文:https://www.cnblogs.com/pquan/p/12675535.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!