作者:黄梓恒_ | 来源:互联网 | 2023-05-19 06:44
今天看到某论坛有人问这么一个问题
i,j都是整型变量.
打印输出i---i的值是1,而如果把i---i赋值给j,打印输出j的值就是0,这是为什么?
29 个解决方案
谁说总是0的,i---i这个表达式的值是1,减一是后缀,先使用变量再计算表达式,假设i的值是5,i--的值就还是5,而第2个i变为了4,结果就是1.但是这个赋值结果变为0还是很难理解,不知道为什么,等高人.
和系统运算顺序有关,"左向右",或"右向左"运算结果不同.
我看懂你的程序了,如果你得到的都是0的话,那么可能真的是编译器或机器的问题.
i---i的值是1 这是一道书上的题 你们去看看 不过我也不知道为什么赋值后变成0了
http://www.xici.net/b260288/d16388798.htm (选择题中的第14题)
http://cache.baidu.com/c?m=9d78d513d9d430a44f9a9e690c66c0101e43f4132ba1d2020ea28449e3732b425011e5ac56210774a7d27d175ab8482cfd803165460537b6ebdffe4ecacb953f2ef83045070bf53205d269aedc4654d656964d9daf0ee6cae74290b9a5a5c82455dd24716df1839c2a7603cb1fab033093b1993e025e60aded4672fe296029e93441c61ceee142797786e1ac5a5bc25ac7171580df32a73f62a262d308685750e70cef070b6076a258268c592041d7ae4ae75d2e0878ef1beeaec1c1ba15d3cbea46c9a6d6ff7fd477e1b1bca2300067558e76e0f5aab24a370440cecbaa669961fcacb7ec5be862d1154bba590d597ccf1d94808c54f3&p=863b8916d9c411a05be8cb394444&user=baidu
或者这个
这种无聊问题总是那些无聊的人才想的出来
说实话,谁会在项目里写这样的代码啊
这个应该给那些研究c++编译器的或者c++原理之类的人琢磨,简直就是浪费脑细胞的
(i--)-i或者i-(--i)这样都还不怎么好,同一个变量使用自增或者自减后在同一代码里继续使用--是个不好的编码习惯---极有可能出现未定义行为
但是不管是(i--)-i和i-(--i),得到的结果都应该是1,为什么赋值之后就是0了呢?
我也觉得18楼有道理...都是视编译器而定的..就像printf("%d,%d",i++,++i);一样...不同编译器结果是不同的
6: int n = 5;
00401048 mov dword ptr [ebp-4],5
7: printf("%d", n---n);
0040104F mov eax,dword ptr [ebp-4]
00401052 sub eax,dword ptr [ebp-4]
00401055 mov dword ptr [ebp-0Ch],eax
00401058 mov ecx,dword ptr [ebp-0Ch]
0040105B push ecx
0040105C push offset string "%d" (00431024)
00401061 mov edx,dword ptr [ebp-4]
00401064 sub edx,1
00401067 mov dword ptr [ebp-4],edx
0040106A call printf (004082c0)
0040106F add esp,8
8:
9: n = 5;
00401072 mov dword ptr [ebp-4],5
10: int j = n---n;
00401079 mov eax,dword ptr [ebp-4]
0040107C sub eax,dword ptr [ebp-4]
0040107F mov dword ptr [ebp-8],eax
00401082 mov ecx,dword ptr [ebp-4]
00401085 sub ecx,1
00401088 mov dword ptr [ebp-4],ecx
11: printf("%d", j);
0040108B mov edx,dword ptr [ebp-8]
0040108E push edx
0040108F push offset string "%d" (00431024)
00401094 call printf (004082c0)
00401099 add esp,8