A. c语言优先级的题目,如下图52题
C是正确的
对于A
a*b/a*b从左到右计算 结果是b*b
对于B
a/b*b由于整型可能会舍去一部分 所以这个已经不一定是a了 再除以a可能为0
对于D和B是类似的
只有C
a/b*b得到的是a/b的整数部分 乘上b
而a%b是余数
相加结果是恒为a的
B. C语言优先级的题目
a!=b=1
m=1
b>c=0
n=0
1&&0=0
C. c语言优先级问题
不是呀,i++的定义和i=i+1是完全不同的两个概念
你说的那个是++i。i++的意思是在执行一遍赋值语句后i才自动加1
二++i 是没执行语句前i就自动加1了!
D. c语言优先级题目
4.000000
E. c语言符号优先级测试题
printf("%d\n",*p++);相当于取*p打印然后再p++:printf("%d\n",*p); p++;会输出20
printf("%d\n",++*p);相当于printf("%d\n",++(*p));由于前句p的位置已经后移执行a[2],所以会输出31
F. C语言优先级问题
num++是在运算结束后才+1的
所以上面等同于
a+b-a-b
结果等于0
G. 关于C语言运算符优先级题目
选择C,没错!
H. c语言优先级的一道题
y=y+(y=y-(m=m*y))
y=y+(y=y-(m=5*2))
y=y+(y=y-10)
y=y+(y=2-10)
y=y+(-8)注意此时y已经变为-8
y=-8+(-8)
y=-16
(a=4*5,a*2),运行此句之后a=20,第二个表达式值是40但因为它并没有赋给任何变量,对a的值并无影响
a+6=20+6=26
I. 求解一道c语言关于符号优先级的基本题
能想到这已经算是入门了。。。
这是编译器的原因,C++的编译器在同时处理!和++时会有一些混乱
b=!b++;以下是本条指令的汇编指令
0040163B mov eax,dword ptr [ebp-0Ch]从存储器取出b(!运算)
0040163E mov ecx,dword ptr [ebp-0Ch]从存储器取出b(++运算)
00401641 add ecx,1 b自增(++运算)
00401644 mov dword ptr [ebp-0Ch],ecx 将b存回存储器(++运算)
00401647 test eax,eax 逻辑取反(!运算 )
00401649 jne main+84h (00401654)
0040164B mov dword ptr [ebp-14h],1
00401652 jmp main+8Bh (0040165b)
00401654 mov dword ptr [ebp-14h],0
0040165B mov edx,dword ptr [ebp-14h] 运算结果赋值(=运算)
0040165E mov dword ptr [ebp-0Ch],edx 运算结果存回存储器b(覆盖掉了++运算的结果)
可以看出来在b=!b++中++对于最终b的取值没有任何影响
get(a,!a++);以下是本条指令的汇编指令
004015EF mov eax,dword ptr [ebp-4]//首先运算!a++
004015F2 mov ecx,dword ptr [ebp-4]
004015F5 add ecx,1
004015F8 mov dword ptr [ebp-4],ecx
004015FB test eax,eax
004015FD jne main+38h (00401608)
004015FF mov dword ptr [ebp-10h],1
00401606 jmp main+3Fh (0040160f)
00401608 mov dword ptr [ebp-10h],0
0040160F mov edx,dword ptr [ebp-10h]//以上都是在运算!a++,并将运算结果存于edx中,但是可以发现现在存储器中的a的值已经发生了改变,变为a+1
00401612 push edx//将!a++的结果压栈(C++中函数的参数的调用是通过栈来实现的,主函数将参数压栈,被调用函数将参数出栈)
00401613 mov eax,dword ptr [ebp-4]//从存储器读取a(实际上值已经变为a+1)
00401616 push eax//将a压栈(将a+1压栈)
00401617 call @ILT+345(get) (0040115e)//调用函数
0040161C add esp,8
printf()的调用过程也与这个函数类似,可以看出最终get(a,!a++)实际上调用到的是get(a+1,!a++),这也就是为什么后者显示为2 0的原因了
J. C语言关于优先级的小题,如下:
因为!的优先级比&&优先级高,而i++是先求表达式再自加的,因此应先执行与i有关的表达式,也就是ch&&i,但是!的运算符高于&&,因此先执行!ch,因为ch的值为非0,那么!ch之后值就为0,而对于逻辑与运算采用的规则是短路运算规则,也就是说如果&&左侧的值为0的话,那么右边的表达式就不用计算了,因为不管右边表达式的值为多少,他与0进行逻辑与&&的结果都为0,因此只要左边的值为0,就没必要计算右测的表达式。因此,本例中右侧的表达式i++根本就没有执行。所以i的值还是为1。