c语言中的运算符优先级和结合性

! ~ ++ -- + - * & sizeof 自右向左 + - 自左向右 这两个都包含了+ -是不是矛盾呀 何为表达式的返回值int a=2;a%=4-1;printf(。。。。。。)a+=a*=a-=a*=3printf(。。。。。。)然后a的值是 a=2 a=0d第二个式子是从哪往哪算顺便举个例子说名一下逻辑右移 有没有逻辑左移

第1个回答  2013-12-19
1.a%=4-1;<==>a%=(4-1)<==>a%3=2
2.从右向左算, a=a*3 所以a=6a=a-6 所以a=0a=a*0 所以a=0a=a+0所以a=0
3.逻辑右移, 逻辑左移都存在,以下举例(为方便使用char类型,short,int 类似):
char cc = 1;//1(00000001)
cc = cc>>1;//1(00000000)
cout<<int(cc)<<endl;
输出为:0

cc = 3;//00000011
cc = cc>>1;//00000001,右边1溢出
cout<<int(cc)<<endl;
输出为:1;

cc = 128;//(10000000)
cc = cc>>1;//(11000000)负数右移时,符号位不变,所以有两个1;
cout<<int(cc)<<endl;
输出为:-64
unsigned char cc=128;
cc = cc>>1;//(01000000)无符号数右移时,因为不存在符号位,只有一个1;
cout<<int(cc)<<endl;
输出为:64

位移可用于计算2的乘除法,计算速度优于*,/运算,但可读性差,例如:
int i = 1;
i = i<<3;//等价于 i = i*2*2*2;

i = i>>1;//;//等价于 i = i/2;
第2个回答  2019-07-08
int
a=2;a%=4-1。。是:a=a%(4-1)...。。。就是a=2%(4-1)。就是2%3,(因2+3*0等于2)
第二个::相当于:a=a*3;
a=a-a;
a=a*a;
a=a+a;
所以是0。
有逻辑左移,,。逻辑左移是把二进制形式左移,逻辑右移也是把二进制形式右移。
第3个回答  2013-12-19
C语言中所使用的运算符的优先级和结合性:

优先级 运算符 结合性
(最高) () [] -> . 自左向右
   ! ~ ++ -- + - * & sizeof 自右向左
  * / % 自左向右
   + - 自左向右
   << >> 自左向右
  < <= > >= 自左向右
  == != 自左向右
  & 自左向右
  ^ 自左向右
  | 自左向右
  && 自左向右
  || 自左向右
  ?: 自右向左
  = += -= *= /= %= &= ^= |= <<= >>= 自右向左
(最低) , 自左向右
第4个回答  2013-12-19
从右向左算, a=a*3 所以a=6
a=a-6 所以a=0
a=a*0 所以a=0
a=a+0所以a=0本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网