作者gn00618777 (非常念旧)
看板C_and_CPP
标题[问题] 自动转型别的问题
时间Sun Aug 19 10:36:17 2018
网路上有一个考题
unisgned int a = 6;
int b = -20;
(a+b)?puts(">6"):puts("<6");
Ans: >6
主要是考你 b 会自动转成 unsigned int
-------------------------------------------------------------------------
我觉得怪怪的。
(-1)?puts(">6"):puts("<6") -->其实也会跑 > 6
(0)?puts(">6"):puts("<6") -->这样才会跑 < 6
(1)?puts(">6"):puts("<6") -->会跑 >6
总结: 只有在非0时,才会是 true。跟if 和 while 一样
这其实看不出来是考你自动转型别。
我再写一个
unisgned int a = 6;
int b = -20;
printf("%u\n", a+b); //出现一个很大的未知数字
printf("%d\n", a+b); //-14
这并没有自动转型别阿!?
我是不是误会了甚麽?
谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.68.215.61
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1534646181.A.EC7.html
1F:推 jerryh001: 有转 -20变uint就是很大的数字没错 08/19 10:41
2F:→ Lipraxde: 我推荐使用typeof看型别 08/19 11:38
3F:→ xam: 现在compiler会喷warning, 然後设定把warn当error,要你别酱 08/19 12:09
4F:推 sarafciel: 非零的时候才会是false的话 你肯定是误会了XD 08/19 14:20
※ 编辑: gn00618777 (219.68.215.61), 08/19/2018 15:48:24
※ 编辑: gn00618777 (219.68.215.61), 08/19/2018 15:48:33
5F:→ gn00618777: 抱歉 我手误 应该是只要非0 都是 true 08/19 15:49
6F:推 leo850319: 第一个要考转型别的话 应该是要写 ((a+b) > 6) ? put 08/19 16:15
7F:→ leo850319: s(">6") ... ?前面是一个布林运算式 08/19 16:15
8F:→ leo850319: 第二个的话 printf它会根据你给个%d %u来决定变数输出 08/19 16:17
9F:→ leo850319: 的时候的型别是什麽 你给%d 它就把存在那个变数的记 08/19 16:17
10F:→ leo850319: 忆体值当作int 08/19 16:17
11F:推 leo850319: 第一个的考法也有直接比较 (a > b )这样的 08/19 16:25