一.赋值运算
1.赋值操作是程序设计中最常用的操作之一,C 语言共提供了 10个赋值运算符,均为二元运算符,其中仅有一个为基本赋值运算符 =,其余 9 个均是复合赋值运算符,即:
(1)基本赋值运算符:=
(2)复合赋值运算符:+=(加赋值)、-=(减赋值)、*=(乘赋值)、/=(除赋值)、%=(求余赋值)、 <<=(左移赋值)、>>=(右移赋值)、&=(按位与赋值)、|=(按位或赋值)。
2.基本赋值
如 int a=1; 表示把 1 赋值给整型变量 a,不能读成 “a等于1”。赋值号左边必须为左值,赋值号右边的右值可以为常量、变量或表达式。如下赋值均是正确的。
int a,b; //定义整型变量a和b a=3; //把常量3赋值给a,右值为常量 b=a; //把变量a的值赋给b,右值为变量 b=a+3; //把求和表达式a+3的值赋给b,右值为表达式
讯享网
以下赋值均是错误的
讯享网int a=2; 3=a; //错误,常量3不能作为左值 const int b=5; //定义整型常变量只读变量b,并初始化为5,其值不能被改变 b=1; //错误,企图改变常变量的值,即常变量不能作左值
3.复合赋值
a+=b; 等价于 a=a+b;//(加赋值); a-=b; 等价于 a=a-b;//(减赋值); a*=b; 等价于 a=a*b;//(乘赋值); a/=b; 等价于 a=a/b;//(除赋值); a%=b; 等价于 a=a%b;//(求余赋值);5%2=1 -5%2=-1 5%-2=1
4.左右移赋值
1.所有的位运算,都是基于二进制 数据进行的,所以进行位运算前,先把数据转化成二进制数,再做运算,在转化为对应的进制。
(1)左移(<<) i<<y;含义将i左移y位
讯享网x = 8 // 二进制为 0000 1000 m = x << 3 // 左移3位,右边补零 0100 0000 print(m\n); 运算结果:m = 64 推导 左移后赋值(<<=) x = 8 // 二进制为 0000 1000 x <<= 3 // 左移3位,右边补零 0100 0000 print(x\n) 运算结果:x = 64
(2)右移(>>) i<<y;含义将i右移y位
x = 8 // 二进制为 0000 1000 m = x >> 3 // 右移3位,左边补零 0000 0001 print(m\n) 运算结果:m = 1 推导 右移后赋值(<<=) x = 8 // 二进制为 0000 1000 x >>= 3 // 右移3位,左边补零 0000 0001 print(x\n) 运算结果:x = 1
讯享网x = 9 # 二进制为 0000 1001 x &= 3 # x与3按位或,右边补零 0000 0001 print(x\n) 运算结果:x = 1
(2)按位或后赋值(|=)全0为0,其余为1
x = 8 // 二进制为 0000 1000 x |= 3 // x与3按位或,右边补零 0000 1011 print(x\n) 运算结果:x = 11
重点:
1.赋值后,左边的值被右边表达式的值替换;
2.如果左右两边类型不一致,以左边变量的类型为准,将表达式值的类型转换为左边变量的类型;
3.运算方法:从右向左;注意:两个运算符中间不要有空格。
例题:设有如下变量定义,计算表达式y+=i-=j*=++x的值
讯享网 int i=3,j=5; float x=2.5,y=5.0;
计算步骤:
计算++x y+=i-=j*=++x ++x等价于x=x+1 x=3.5 计算j*=++x y+=i-=j*=++x 经过第一步计算变为: y+=i-=j*=x 此时x=3.5 j=j*x 等号右边j * 3.5=17.5 赋值给左边后:j=17 (从右向左计算,因为j为int类型,所以小数部分就被抹去了) 计算i-=j*=++x 经过上一步计算变为: y+=i-=j i=i-j 此时j=17 i=-14 计算y+=i-=j*=++x y+=i-=j*=++x 经过上一步计算变为: y+=i 此时i=-14 y=y+i y=-9.0 y是double型的,结果由-9变为-9.0
二.逻辑运算符的优先级和结合性
1.逻辑与 (&&) (并且)表达式一个为假,结果为假;1并且2;二者对满足才可以。
表达式1&&表达式2,判断表达式1.2是否成立;
1==2&&7>3,1不等于2为假;
2.逻辑或 (||)(或者) 表达式一个为真,结果为真 1或者2,二者只要有一者满足就可以
表达式1||表达式2
1==2 || 7>3 7大于3为真,结果为真,
最后
关于*A=(按位异或赋值)本人还未理解,求大神补充!!!!
(〒▽〒)由于本人能力有限以及是个小迷糊,如有错误或是不妥的地方,麻烦各位及时指出,以免我误导他人,多谢🥳

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/38276.html