C语言运算问题
A=[表达式]?a:b;
等价于
if(表达式)A=a;
else A=b;
同理,
printf(y?"
":"no
");
等价于
if(y)printf("
");
else printf("no
");
*a++=*b++;这里,++与* 号的优先级都比等号高,等他们都执行完,9=6,是这个东西,这是什么意思?
注意:++与*是同一级运算符,结合方向有运算方向决定,不是你讲的++优先*号,
呵呵,想来是这里的问题。你看图片,比较哈就知道了。
高手指教,相互学习。
第二问:这是个优先级的问题 += 、-=等符号运算是自右向左运行的,优先级小于加减乘除,运行后赋值,因此a+=a-=a*a 为 1.a-=a*a a为-6 2. a+=a即a=a+a=(-6)+(-6)=-12 所以答案为D
补充问题1:(m=a==b)||(n=c==d) 注意:A||B 这个表达式 当A为1时,即表达式为真 不会再进行B的运算,只有当A=0时 才会进行B的运算,你可以试试将题目中a的初始值设为1 那么 就会执行到n=c==d 这 ,n就会被赋值了; && 与 也是一样的运算顺序
问题2:同上的道理 , A && B 需要是A为1 时才能往下执行 B是否为1,否则直接返回表达式的结果为 0
第一个没想明白,不过第二个倒是可以为你解答。
C语言是遵循右优先的,就是从右面开始运算。
a+=a的意思是说a=a+a,就是说将a+a的值赋给a。
首先运算3*3的9,表达是变成了a+=a-=9.
a-=9相当于a=a-9;a+=a-9相当于a=a+(a-9)
then,看好这一步,到目前为止a的值还是3,a=a+(3-9)得到式子
a=a+(-6)此时a被赋值为-6,then最后一步,a=-6+(-6)=-12;
我说的够清楚了吧?
第一个问题我真的没看明白!我写的可不少啊,纯手打,正好我也在
研究C++顺便帮你回答一下,希望有帮助!
第一题 !(!x)是双重否定等同于x,在C语言中,x不为0时表达式x为真,所以第一题选C
第二题 a+=a-=a*a是按照从右到左的顺序
a-=a*a使得a的值由3变成3-3*3=-6,这个表达式的值也就是-6
a+=a-=a*a也就等同于a+=(-6),此时a=-6,所以整个表达式执行完毕后a=-12
第三题
首先看m=a==b
a==b这个表达式很明显值为真,则m=1,m=a==b这个表达式的值也就是m的值为1
那么整个表达式的值也就为真了(或运算“||”满足条件),后面的n=c==d不执行判断,此时m=1,n=0
第四题
首先看m=a>b
a=1且b=1,那么a>b显然不满足,则m=0,同理m=a>b也为0,则整个表达式的值就为假(与运算“&&”满足否定条件),后面的n=a>b系统不执行,此时m=0,n=1
1。C 2。D
C语言地址运算问题
1. 地址加整数:整数表示移动的单位数。对于二维数组,例如定义了一个数组 `a[][]`,`a` 能代表数组的一行,`a+1` 表示向后移动了一行,即 `a[1]`,也就是 `a[1][0]` 的地址。2. 数组元素管理:`a[i]` 是以单个元素为单位进行管理的,`a[i]+1` 表示以 `a[i][0]` 为起始...
C语言运算的问题
b=a--,先将a的值赋给b,a再自减1 a=3,b=a=3,然后a自减1,a=2 x=(a=3,b=a--),右边为逗号运算符,从左至右执行各语句,并将最后一个语句的计算结果赋给x,对于本题,也就是将b的值赋给x。x=3 因此,执行语句x=(a=3,b=a--);后,x的值是3,a的值是2,b的值是3。
c语言位运算问题?
c语言位运算问题解答:要解答这个问题我们先来看一个例子,代码如下图一,图中右边是问题中得到代码,左边是这段代码的汇编指令。两种情况的不同点详细说明如下:第一种情况:printf("%d",2>>64);由图中的汇编代码可以看出,如果两个数都是常数的情况下,代码中是不含对应的汇编指令的,因为编译器...
C语言问题,在位运算中,操作数每右移一位,其结果相当于什么?若左移1位...
1、右移,除以2右移n位除以2的n次方;右移的概念和左移相反,就是往右边挪动若干位,运算符是>>;右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:inti=0x80000000;i=i>>1;\/\/i的值不会变成0x40000000,而会变成0xc0000000 2、左移,乘以2...
C语言运算符问题
i++,表示先用再改变i的值。那么p=(i++),此时先调用i=5,然后i变为6,经下过一个(i++),先调用i=6,然后i变为7,再经过最后一个,先调用i=7,调用完之后i自身变为8.所以p的值=5+6+7=18,i=8 第二个则是相反,先改变j的值,然后再调用,那么q=(++j),j先变为6,然后调用6,...
C语言运算符优先级问题。为什么||比&&低
这个问题很好解释:1)首先,你只输出了三个值,第四个值并没有输出。2)你需要明确的一点是:程序在执行printf语句的时候,其实内部是倒着来执行的,也就是说,先输出第三个%d,然后第二个%d,最后第一个%d。3)那么这就有一个问题:关于,++i和i++的区别:前者是先自增后才返回给%d,后者是...
C语言中运算符++和——问题
1、++a先运算,a=3 2、第二个++a进行运算,a=4,注意这个时候a已经等于4了,也就是第一步运算出来的a=3被覆盖了 3、运算++a*++a就是4*4=16 4、运算最后一个++a,a=5,为什么这里不覆盖前面的运算呢?因为前面运算的结果不存在a中,而是在临时的内存中 5、最后运算16*5=80 ...
一道C语言的简单的算术问题,请说明运算顺序。
a%3*(int)(x+y)%2\/4 由于()的优先级最高,所以先计算x+y并进行类型转换,之后上式就变成了:a%3*7%2\/4 之后由于这里的运算符优先级相同,而且结合性是从左向右的,所以从左向右依次计算,即上式等价于:(((a%3)*7)%2)\/4 把a=7代入上式,得:(((7%3)*7)%2)\/4 于是,最终...
关于C语言的一个运算问题
正确答案应该是B。(1\/2)*(a+b)*h中1\/2结果为0,所以整个表达式结果为0,故不正确。若改为1.0\/2就正确啦。运算符\\有两个含义:①当两边数为整数时,表示整除运算,商运算 ②当两边不同时为整型的数值时,表示除法运算。
关于C语言问题运算顺序问题
下面的是我自己总结的关于C优先级的口诀.当然,应用这个口诀的前提是你必须认识所有的C语言的运算符。优先决 括号成员第一; \/\/括号运算符[]() 成员运算符. -> 全体单目第二; \/\/所有的单目运算符比如++ -- +(正) -(负) 指针运算*& 乘除余三,加减四; \/\/这个"余"是指取余运算...