周末学习无意看到的,题目源自接口时间的深入 C 语言和程序运行原理,一起来看问题吧。
#include <stdio.h>
int main(void) {
int x = -10;
unsigned int y = 1;
if (x < y) {
printf("x is smaller than y.");
} else {
printf("x is bigger than y.");
}
return 0;
}
这样的一段代码,问题来了:
- 最终会输出哪个分支?
- 造成这样的原因是?
更多问答 >>
-
每日一问 | App在运行状态,可以动态安装apk,并且不重新启动吗?
2022-11-20 12:46 -
每日一问 | 瘦身属性?对android:extractNativeLibs属性的探讨
2022-12-07 14:43 -
每日一问 | Android 默认开启硬件加速与设置hardwareAccelerated是一回事吗?
2023-05-24 17:30 -
每日一问 | Android 模块化依赖中的资源冲突该如何规避?
2023-05-24 17:30 -
每日一问 | targetSdkVersion 有什么神奇的魔力?
2023-05-24 17:30 -
2022-11-08 21:50
-
大家提问 Android中前后台切换监听,如果涉及到多进程如何完美的解决?
2022-12-04 22:50 -
每日一问 View.post 又来了与View.postOnAnimation 有什么区别?
2022-07-03 10:47 -
【大家提问】Android中的匿名binder与线程相关的一些问题
2022-07-03 10:48 -
2022-06-12 14:41
盲猜第二个,不然压根就不会问这个问题。
正经回答,首先,想要了解下一个int存在磁盘里的数字是啥样的。对于负数,先是符号位,然后是数值位,所以-10对应于0xff ff ff f6(这里假定是按照java的位数);然后对于无符号的数1,显然就是0x00 00 00 01 。
知道这些之后,那么问题来了,对于c语言,一个int与无符号int比较大小的时候,是咋处理的。显然,这超出了一个java程序员的知识范围,那么借助百度,找到如下链接:https://blog.csdn.net/WhiteLogin/article/details/90082777
关键话语:在有符号整型和无符号整型的比较中,自动将有符号整型数转换为无符号整型。
然后对比的时候,显然是0xff ff ff f6要大。
1,会输出第二个分支。
2,原因参考:https://www.learncpp.com/cpp-tutorial/unsigned-integers-and-why-to-avoid-them/3,如何在实际工作中及时发现这一问题?调高警告的级别,比如在 CMakeLists.txt 中添加: