! ~ ++ -- + - * & 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.从右向左算, 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。
有逻辑左移,,。逻辑左移是把二进制形式左移,逻辑右移也是把二进制形式右移。
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 自右向左
* / % 自左向右
+ - 自左向右
<< >> 自左向右
< <= > >= 自左向右
== != 自左向右
& 自左向右
^ 自左向右
| 自左向右
&& 自左向右
|| 自左向右
?: 自右向左
= += -= *= /= %= &= ^= |= <<= >>= 自右向左
(最低) , 自左向右
优先级 运算符 结合性
(最高) () [] -> . 自左向右
! ~ ++ -- + - * & 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本回答被网友采纳
a=a-6 所以a=0
a=a*0 所以a=0
a=a+0所以a=0本回答被网友采纳