这个题目的结果如此诡异
时间:2010-08-19
来源:互联网
- #include <stdio.h>
-
- int main() {
- int x;
- //int b = 1 && x;
- printf("%d",x == (1 && x));
- getchar();
-
- return 0;
- }
我调试时发现没有注释时x=1,注释后x=9591052.
我是在Windows下,用的是BCB6。
请大牛告诉原因。
经过网友讨论,我又将代码改成下面的:
- #include <stdio.h>
-
- int main() {
- int x;
- int b = 1 && x;
- printf("x=%d\n",x);
- printf("b=%d\n",b);
- printf("%d\n",x == (1 && x));
- getchar();
-
- return 0;
- }

请注意,我用的是BCB6.0,会不会是和编译器有关。
我就是想知道,为什么我定义了b,x就会等于1;而不定义b,x就是个随机值。
作者: chinesedragon 发布时间: 2010-08-19
作者: zhaohongjian000 发布时间: 2010-08-19
作者: davelv 发布时间: 2010-08-19
zhaohongjian000 发表于 2010-08-19 17:09
我知道没有初始化。我需要知道的是没有初始化的情况下怎么会出现那样的结果!!!
作者: chinesedragon 发布时间: 2010-08-19
davelv 发表于 2010-08-19 17:18
我不是开玩笑的哦
作者: chinesedragon 发布时间: 2010-08-19
话说输出为1的时候只有两种情况,x为0或者1,其它的由于x的高位都非0,x & 1的值只能是0或者1,所以都不等……
你多验几次确定后再发帖吧,反正得1的概率很低,我这边算了很多次都是0…………
BTW:能得1的rp真好

作者: daybreakcx 发布时间: 2010-08-19
作者: davelv 发布时间: 2010-08-19
话说输出为1的时候只有两种情况,x为0或者 ...
daybreakcx 发表于 2010-08-19 17:28
理论上是1/2^32

作者: hellioncu 发布时间: 2010-08-19
话说输出为1的时候只有两种情况,x为0或者 ...
daybreakcx 发表于 2010-08-19 17:28
是&&不是&...
作者: davelv 发布时间: 2010-08-19
不好意思,手误,但是结论貌似还是一样的,囧…………
作者: daybreakcx 发布时间: 2010-08-19
这个表达式结果只能是1或者0吧.

作者: pandaiam 发布时间: 2010-08-19
话说输出为1的时候只有两种情况,x为0或者 ...
daybreakcx 发表于 2010-08-19 17:28
我将代码改成下面的:
- #include <stdio.h>
-
- int main() {
- int x;
- int b = 1 && x;
- printf("x=%d\n",x);
- printf("b=%d\n",b);
- printf("%d\n",x == (1 && x));
- getchar();
-
- return 0;
- }
未命名.JPG (6.38 KB)
|
作者: chinesedragon 发布时间: 2010-08-19
作者: chinesedragon 发布时间: 2010-08-19
不好意思,手误,但是结论貌似还是一样的,囧…………
daybreakcx 发表于 2010-08-19 17:31
结果不一样把,&按位与的话,理论上结果为0和1的概率是一样的。而&&逻辑与的话,使用int32的整数,为0的概率等于1/(2^32)
作者: davelv 发布时间: 2010-08-19
b=1
0
gcc下.
作者: pandaiam 发布时间: 2010-08-19
davelv 发表于 2010-08-19 17:40
如果用&&的话,只有当x=0时结果才为0,对吧?
作者: chinesedragon 发布时间: 2010-08-19
chinesedragon 发表于 2010-08-19 17:45
没错,if(1&&x)跟if(x)这两个是等价的
作者: davelv 发布时间: 2010-08-19
作者: chinesedragon 发布时间: 2010-08-19
定义b和x没啥关系.
作者: pandaiam 发布时间: 2010-08-19
作者: davelv 发布时间: 2010-08-19
davelv 发表于 2010-08-19 17:52
这是我在PPURL注册时,网站让算的一道 题
作者: chinesedragon 发布时间: 2010-08-19
回复 chinesedragon
木有初始化 x 是随机的 试了几次都是0
gcc 4.2.4
作者: zhanglistar 发布时间: 2010-08-19
davelv 发表于 2010-08-19 17:40
结果实际上是一样的,都是x为0或者1的时候结果是1,其它都是0,概率都很低
对于&或者&&和1一起返回值都是0或者1,所以任何非0,1的数值都不可能==,因此结果都是0
对于x为0或者1,结果都是1,不信你可以带一下看看
结论:只有x为0或者1的时候才会输出1,其它都是0,概率的话大概是1/(2^32 - 2),所以既然是验证码,还是输0靠谱点
分析半天我真蛋疼…………

作者: daybreakcx 发布时间: 2010-08-19
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28