每日一练4

#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 也就不为奇怪了

猜你喜欢

转载自www.cnblogs.com/pquan/p/12675535.html
今日推荐