C语言赋值及基本运算

一.赋值运算
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=(按位异或赋值)本人还未理解,求大神补充!!!!
(〒▽〒)由于本人能力有限以及是个小迷糊,如有错误或是不妥的地方,麻烦各位及时指出,以免我误导他人,多谢🥳

  • 12
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值