一.赋值运算
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
5.按位或后赋值与按位与后赋值
(1)按位与后赋值(&=)全1为1,其余为0
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为真,结果为真,
3.逻辑非 ! (否) 不是的意思
!表达式 (表达式为真,加!,结果就为假,表达式为假,加!,结果为真)
优先级: !>&&>|| (非>与>或)
问题:如何表达1<x<10?
最后
关于*A=(按位异或赋值)本人还未理解,求大神补充!!!!
(〒▽〒)由于本人能力有限以及是个小迷糊,如有错误或是不妥的地方,麻烦各位及时指出,以免我误导他人,多谢🥳