2.9C++赋值运算符与赋值表达式

赋值运算符
赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。

如“a=3”的作用是执行一次赋值操作(或称赋值运算)。

把常量3赋给变量a。

也可以将一个表达式的值赋给一个变量。

赋值过程中的类型转换
如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时会自动进行类型转换。

1) 将浮点型数据(包括单、双精度)赋给整型变量时,舍弃其小数部分。

2) 将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。

3) 将一个double型数据赋给float变量时,要注意数值范围不能溢出。

4) 字符型数据赋给整型变量,将字符的ASCII码赋给整型变量。

5) 将一个int、short或long型数据赋给一个char型变量,只将其低8位原封不动地送到char型变量(发
生截断)。

例如
short int i=289;
char c;
c=i; //将一个int型数据赋给一个char型变量
赋值情况见图2.8。

为方便起见,以一个int型数据占两个字节(16位)的情况来说明。

6) 将signed(有符号)型数据赋给长度相同的unsigned(无符号)型变量,将存储单元内容原样照搬(连原
有的符号位也作为数值一起传送)。

【例2.5】将有符号数据传送给无符号变量。

.#include <iostream>
.using namespace std;
.int main( )
.{
.unsigned short a;
.short int b=-1;
.a=b;
.cout<<"a="<<a<<endl;
.return 0;
.}
运行结果为
a=65535
赋给b的值是-1,怎么会得到65535呢?请看图2.9所示的赋值情况。

-1的补码形式为1111111111111111(即全部16个二进制位均为1),将它传送给a,而a是无符号型变量,16个位全1是十进制的65535。

如果b为正值,且在0~32767之间,则赋值后数值不变。

不同类型的整型数据间的赋值归根结底就是一条:按存储单元中的存储形式直接传送。

C和C++使用灵活,在不同类型数据之间赋值时,常常会出现意想不到的结果,而编译系统并不提示出错,全靠程序员的经验来找出问题。

这就要求编程人员对出现问题的原因有所了解,以便迅速排除故障。

复合的赋值运算符
在赋值符“=”之前加上其他运算符,可以构成复合的运算符。

如果在“=”前加一个“+”运算符就成了复合运算符“+=”。

例如,可以有
a+=3 等价于a=a+3
x*=y+8等价于x=x*(y+8)
x%=3 等价于x=x%3
以“a+=3”为例来说明,它相当于使a进行一次自加3的操作。

即先使a加3,再赋给a。

同样,“x*=y+8”
的作用是使x乘以(y+8),再赋给x。

为便于记忆,可以这样理解:
.a+= b(其中a为变量,b为表达式)
.a+= b (将有下划线的“a+”移到“=”右侧)
. a = a + b (在“=”左侧补上变量名a)
注意,如果b是包含若干项的表达式,则相当于它有括号。


.x %= y+3
.x %= (y+3)
.x = x%(y+3)(不要错认为x=x%y+3)
凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。

C++可以使用以下几种复合赋值运算符:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
其中后5种是有关位运算的。

C++之所以采用这种复合运算符,一是为了简化程序,使程序精炼,二是为了提高编译效率(这样写法与“逆波兰”式一致,有利于编译,能产生质量较高的目标代码)。

专业的程序员在程序中常用复合运算符,初学者可能不习惯,也可以不用或少用。

赋值表达式
由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。

它的一般形式为:<变量> <赋值运算符> <表达式>
如“a=5”是一个赋值表达式。

对赋值表达式求解的过程是:先求赋值运算符右侧的“表达式”的值,然后赋给赋值运算符左侧的变量。

一个表达式应该有一个值。

赋值运算符左侧的标识符称为“左值”(left value,简写为lvalue)。

并不是任何对象都可以作为左值的,变量可以作为左值,而表达式a+b就不能作为左值,常变量也不能作为左值,因为常变量不能被赋值。

出现在赋值运算符右侧的表达式称为“右值”(right value,简写为rvalue)。

显然左值也可以出现在赋值运算符右侧,因而左值都可以作为右值。

如:
int a=3,b,c;
b=a;// b是左值
c=b;// b也是右值
赋值表达式中的“表达式”,又可以是一个赋值表达式。


a=(b=5)
下面是赋值表达式的例子:
a=b=c=5 (赋值表达式值为5,a,b,c值均为5)
a=5+(c=6)(表达式值为11,a值为11,c值为6)
a=(b=4)+(c=6) (表达式值为10,a值为10,b等于4,c等于6)
a=(b=10)/(c=2) (表达式值为5,a等于5,b等于10,c等于2)
请分析下面的赋值表达式:
(a=3*5)=4*3
赋值表达式作为左值时应加括号,如果写成下面这样就会出现语法错误:
a=3*5=4*3
因为3*5不是左值,不能出现在赋值运算符的左侧。

赋值表达式也可以包含复合的赋值运算符。


a+=a-=a*a
也是一个赋值表达式。

如果a的初值为12,此赋值表达式的求解步骤如下:
.先进行“a-=a*a”的运算,它相当于a=a-a*a=12-144=-132。

.再进行“a+=-132”的运算,它相当于a=a+(-132)=-132-132=-264。

合集下载

c语言的数据类型、运算符和表达式

c语言的数据类型、运算符和表达式

数据类型、运算符和表达式一、C 语言的基本数据类型数据是程序处理的对象。

C 中将数据分为不同的数据类型,任何数据都属于某一种特定的数据类型。

数据类型的作用有两个:一是指明为数据分配多大的存储空间和规定了数据的存储结构,进而规定了数据的取值范围;二是规定了数据所能进行的操作。

C 的数据类型分为基本数据类型和构造类型。

基本数据类型是系统定义的,用户可以直接使用。

构造类型由用户自行定义。

C 的数据类型如图所示。

C 标准没有规定各类数据所占用内存位数。

所以不同c 编译系统的各类数据所占用内存位数是不一样的。

上机使用时,应注意使用的c 编译系统的具体规定。

Turbo C 基本类型 所占位数 数的范围 [signed] char 8 -128~127 unsigned char 8 0~255 [signed]int 16 -32768~32767 short [int] 16 -32768~32767long [int] 32 -2147483648~2147483647 unsigned [int] 16 0~65535 unsigned short [int] 16 0~65535 unsigned long [int]320~4294967295C++数据类型基本类型字符型(char) 空类型(void)整型短整型(short int) 无符号整型(unsigned int)长整型(long int)基本整型(int) 实型(浮点型) 双精度型(double)单精度型(float) 指针构造类型枚举(enum) 联合(union)结构体(struct)数组float 32 约6位有效数字double 64 约12位有效数字在Visual C++中:char:1 Byteint:4 Byteshort:2 Bytelong:4 Bytefloat:4 Bytedouble:8 Byte二、常量常量:整型常量、实型常量、字符常量、字符串常量、符号常量1.整型常量C语言程序中可以使用十进制、八进制和十六进制来表示整型常量。

C语言运算符与表达式

C语言运算符与表达式
• (1) 单目运算符—只需一个操作数。 • (2) 双目运算符—要求有两个操作数。 • (3) 三目运算符—要求有三个操作数。

• C语言中表达式可以是
• 1.一个常量 • 2.一个变量 • 3.由运算符连起来的常量变量
• 表达式可以含有运算符也可以不含有,根据使用运算符的 不同,表达式可分算术表达式、关系表达式、逻辑表达式、 赋值表达式、条件表达式和逗号表达式等。
该逗号表达式的值是10,当然,逗号表,e都已得到自 己相应的值。
又如a和b两数通过第3变量t交换可写成如下逗号 表达式:t=a,a=b,b=t;
2021/2/15
18
2021/2/15
3
算术运算符 8种
+、-、*、/、% 称作 双目运算符(需
要有两个操作数(如2+3, 8*7, a%b等))。
++、――、―(取负)称作 单目运算符
(只需要一个操作数(如++a, --b, -c等))
算术表达式
由常量、变量或各种算术运算符联系 起来的式子
如: 85,a,15/2,(++a)*6,a%b, ++i, --p, -(q+y)等。 算术表达式的值是数值,也可以作为逻辑值使用, 非0代表逻辑“真”,0代表逻辑“假”。
2021/2/15
5
• 注意 : • 1.当两个整数相除时,它们的结果一定为整数。
如7/2 结果为3。 除数和被除数中有一个是实数。如7.0/2或7/2.0它 们的结果都是 3.5。 • 2.取余运算符%两边只能是整数或整型变量。如 18%7其值为4; 15%18 其值为15; 0%6 其值为0; 15%7 其值为1; 14%14其值为0。

c语言34种运算符意义和用法

c语言34种运算符意义和用法

文章标题:深度解析C语言34种运算符的意义和用法在计算机编程世界中,C语言是一种广泛应用的计算机程序设计语言,它为程序员提供了丰富的运算符来完成各种数学和逻辑运算。

作为一个编程语言中至关重要的部分,了解和掌握C语言的运算符对于程序员来说至关重要。

在本文中,我们将深度解析C语言的34种运算符,包括它们的意义和用法,以帮助读者全面了解这些运算符的特点和功能。

1. 赋值运算符赋值运算符是C语言中最基本的运算符之一,用于将右侧的数值或表达式赋给左侧的变量。

赋值运算符由等号(=)表示,例如:a = 10;将10这个数值赋给变量a。

2. 算术运算符算术运算符用于执行基本的数学运算,包括加法(+)、减法(-)、乘法(*)、除法(/)和求模(%)等。

这些运算符在C语言中十分常见,用于处理数字类型的变量。

3. 自增、自减运算符自增(++)和自减(--)运算符用于增加或减少变量的值,它们可以用作前缀或后缀运算符,分别表示在表达式中先执行运算或者先获取变量的值再执行运算。

4. 关系运算符关系运算符用于比较两个值的大小关系,包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)等。

这些运算符经常用于条件判断和逻辑运算中。

5. 逻辑运算符逻辑运算符用于执行逻辑运算,包括与(&&)、或(||)和非(!)运算。

它们通常用于条件判断和逻辑组合中,能够帮助程序员处理复杂的逻辑关系。

6. 位运算符位运算符用于对整数类型的数值进行位操作,包括按位与(&)、按位或(|)、按位取反(~)、按位异或(^)和左移(<<)、右移(>>)等。

位运算符在处理底层数据操作时十分重要。

7. 条件运算符条件运算符(?:)是C语言中唯一的三目运算符,用于根据条件的真假选择不同的值。

它使得代码更加简洁和可读性更强。

8. sizeof运算符sizeof运算符用于获取数据类型或变量的字节大小,它在编程时经常用于内存分配和操作中。

C 赋值运算符与表达式

C 赋值运算符与表达式

C 赋值运算符与表达式在赋值表达式中,如果表达式左边的变量重复出现在表达式的右边,如:i = i+2则可以将这种表达式缩写为下列形式:i += 2其中的运算符+=称为赋值运算符。

大多数二元运算符(即有左、右两个操作数的运算符,比如+)都有一个相应的赋值运算符op=,其中,op可以是下面这些运算符之一:+ - * / % << >> & ^ |如果expr1和expr2是表达式,那么expr1 op= expr2等价于:expr1 = (expr1) op (expr2)它们的区别在于,前一种形式expr1只计算一次。

注意,在第二种形式中,expr2两边的圆括号是必不可少的,例如,x *= y + 1的含义是:x = x * (y + 1)而不是x = x * y + 1我们这里举例说明。

下面的函数bitcount统计其整型参数的值为1的二进制位的个数。

/* bitcount: count 1 bits in x */int bitcount(unsigned x){int b;for (b = 0; x != 0; x >>= 1)if (x & 01)b++;return b;}这里将x 声明为无符号类型是为了保证将x 右移时,无论该程序在什么机器上运行,左边空出的位都用0(而不是符号位)填补。

除了简洁外,赋值运算符还有一个优点:表示方式与人们的思维习惯比较接近。

我们通常会说“把2 加到i 上”或“把i 增加2”,而不会说“取i 的值,加上2,再把结果放回到i中”,因此,表达式i += 2比i = i + 2更自然,另外,对于复杂的表达式,例如:yyval[yypv[p3+p4] + yypv[p1+p2]] += 2赋值运算符使程序代码更易于理解,代码的阅读者不必煞费苦心地去检查两个长表达式是否完全一样,也无须为两者为什么不一样而疑惑不解,并且,赋值运算符还有助于编译器产生高效代码。

程序设计基础_ C语言基础_13 C语言的赋值运算符与赋值表达式_

程序设计基础_ C语言基础_13 C语言的赋值运算符与赋值表达式_

赋值运算符与赋值表达式
C语言中的赋值运算符为“=”。

C语言中赋值操作是作为一种表达式来处理的,由赋值运算符组成的表达式称为赋值表达式。

赋值表达式的一般形式为:
变量名 = 表达式
例如:x = 10+y
赋值运算符的左边必须是一个变量名,右边的表达
式可以是单一的常量、变量、表达式或函数调用语句。

举例
x=10; y=x+10; y=fun ();
5=a; a+b=a+10;
C语言中的赋值符号“=”不同于数学中使用的等号“=”,它没有相等的含义。

例如:x=x+1;
在一个赋值表达式中,可以出现多个赋值运算符,其运算顺序是从右向左结合。

例如
x=y=z=0;
a=b=3+5;
进行赋值运算时,当赋值运算符两边的数据类型不同时,将由系统自动进行类型转换。

转换的原则是:赋值运算符右边的数据类型转换成左边的变量类型。

左右转换说明
float int 将整型数据转换成实型数据后再赋值
int float 自动截去小数部分,整数部分赋给整型,但编译系统
提示警告
long int int, short 值不变
int, short int long int 右侧的值不能超过左侧数据值的范围,否则将导致意
外的结果
unsigned signed 按原样赋值,但是如果数据范围超过相应整型的范围,
将导致意外的结果
signed unsigned
常见错误
C语言中的赋值与数学的等不同
赋值表达式的左侧只能是变量名
表达式可以由常量、变量、函数或表达式构成
思考
对于变量自身增加1的方式,是否只有“i=i+1;”这一种形式呢?。

C语言基本运算符与表达式电子教案

C语言基本运算符与表达式电子教案

优先级: !&&||
结合方向:
! : 右左 && : 左右
|| : 左右
与其它比:单目算术关系逻辑赋值
例 a<=x && x<=b // (a<=x) && (x<=b) a>b&&x>y //(a>b)&&(x>y) a==b||x==y //(a==b)||(x==y) !a||a>b //(!a)||(a>b)
x&&y 0
结果4: input data x,y: -23 ˽ 0 回车
x y !x x||y -23 0 0 1
x&&y 10
结果5: input data x,y: 0 ˽ 0 回车
x y !x x||y 00 1 0
x&&y 0
3.7 自增、自减运算符:++ -作用:使变量值加1或减1
i++ 或 ++i i=i+1
3.4 不同类型数据间的转换
转换有两种: 隐式:计算机自动进行的转换
显式:强制性转换
一、隐式转换(4种)
❖运算转换------不同类型数据混合运算时 ❖赋值转换------把一个值赋给与其类型不同的变量时 ❖输出转换------输出时转换成指定的输出格式 ❖函数调用转换------实参与形参类型不一致时转换
➢两整数相除,结果为整例数例 55%%22 == 1
➢%要求两侧均为整型数据 --55%%22 == -1
例例 55/2/2 ==2
11%%1100 == 1 55%%11 == 0

C语言程序设计基础教程 3.10、赋值运算符与赋值表达式


i+=2
x% = 3 int x=6;
等价于 i = i + 2
等价于 x = x%3
a * = b + 5 等价于 a = a * (b + 5)
执行x+=x-=x*x;后,x的值是?
赋值运算符与赋值表达式
C语言
已知x=6,执行x+=x-=x*x;后,x的值是? 1、运算符的优先级 2、考虑的是运算的结合性
计算过程如下:
(1) 先进行x*x的计算,结果为36 再进行x- =36的计算,相当于x=x-36=-30 最后进行x+=-30的计算,相当于x=x-30=-60
赋值运算符与赋值表达式
C语言
赋值表达式
由“=”连接的式子称为赋值表达式。其一般形式为:
Hale Waihona Puke 变量=表达式功能:计算表达式的值再赋予左边的变量。
赋值运算符与赋值表达式
C语言
布置任务
假设变量a=3;b=7;编程实现将a,b变量的值交换,并输出a,b的值。
例如:x=3 y=x+3 结合性:
从右向左
如:a=b=c=1
可理解为:a=(b=(c=1))
赋值运算符与赋值表达式
C语言
设原来a=12,且a和n已经定义为整型变量。计算: 1.a+=a 2. a-=12
3.a*=2+3
4.a/=a+a
5. a%=(n%=2),n的值等于5
6. a+=a-=a*=a
赋值运算符与赋值表达式
C语言程序设计
赋值运算符与赋值表达式
C语言
赋值运算符
简单的赋值就是把一个表达式的值赋给一个变量。

C语言运算符与表达式介绍


运算符与表达式
运算符与表达式
运算符与表达式
3.逻辑运算符与表达式
运算符与表达式
4.赋值运算符与表达式
运算符与表达式
运算符与表达式
运算符与表达式
运算符与表达式
5.自增和自减运算符与表达式
运算符逗号运算符与表达式
7.条件运算符与表达式
运算符与表达式
8.位运算符与表达式
运算符与表达式
运算符与表达式
运算符与表达式
9.强制类型转换运算符与表达式
10.sizeof 运算符与表达式
表达式语句与复合语句
表达式语句与复合语句
表达式语句与复合语句
表达式语句与复合语句
现象?
程序的结构化设计
C语言运算符与表达式介绍
✓运算符与表达式 ✓表达式语句和复合语句 ✓程序的结构化设计
运算符与表达式
1.算术运算符与表达式
运算符与表达式
运算符与表达式
运算符与表达式
2.关系运算符与表达式
高 低
运算符与表达式
P0:段码输出 P2(H):位码输出 P2(L):按键输入
运算符与表达式
运算符与表达式

C语言-类型、运算符与表达式


所有整数在内存中均以补码形式存放. 正数的原
码、反码和补码相同.
10

正数的补码 = 原码 = 反码

负数的补码 = 反码+1 =符号位以外按位取反+1
+ 反 = 0
+ 反 + 1 = 0(高位溢出舍弃)
− = 反 + 1
计算机只会做加法, 3-2会转化为3+(-2).
long float radius;
long double area;
▪ signed, unsigned
▪ 用于限定char类型或整型
▪ 浮点型均为signed类型
6
单字节数: 1111 1111
无符号数: 255 / 有符号数: -1
双字节数: 1111 1111 1111 1111
无符号数: 65535 / 有符号数: -1
return 0;
}
16

要求: 确定由signed和unsigned限定的char,
short, int和long类型变量的取值范围

打印limits.h中相应值
17
1.
将0所有位转换为1: ~0 (位数由系统分配)
2.
结果转换为unsigned char类型: (unsigned
char)~0 (这就是unsigned char的最大值)
▪ enum escapes {BELL = ‘\a’, TAB = ‘\t’, NEWLINE = ‘\n’}
▪ enum months {JAN = 1, FEB, MAR, APR};
27

所有变量必须先声明, 后使用
变量类型 变量名表列;

C语言赋值运算符与赋值表达式

C语言赋值运算符与赋值表达式C语言赋值运算符与赋值表达式我们都知道基本的赋值运算符是"=",他的优先级别低于其他的运算符,所以对该运算符往往最后读取。

下面和大家分享一下C语言赋值运算符与赋值表达式,一起来看看吧!C语言赋值运算符与赋值表达式1一、赋值运算符与赋值表达式赋值符号“=“就是赋值运算符,作用是将一个数据赋给一个变量或将一个变量的值赋给另一个变量,由赋值运算符组成的表达式称为赋值表达式。

一般形式为:变量名=表达式在程序中可以多次给一个变量赋值,每赋一次值,与它相应的存储单元中的数据就被更新一次,内存中当前的数据就是最后一次所赋值的那个数据。

例:a=12;此表达式读作“将10的值赋值给变量a”。

说明:a、如果赋值号两边的运算对象类型不一致,系统会自动进行类型转换,转换的规则:将赋值号右边表达式的值的类型转换成赋值号左边变量的类型,例:inty=3.5;在变量y中最终存储的是整数3。

b、可以将复制表达式的值再赋值给变量,形成连续赋值。

例如:x=y=25是一个连续赋值表达式,x=y=25等价于x=(y=25),所以表达式x=y=25最终的值为25。

二、复合的赋值运算符在赋值运算符之前加上其他运算符可以构成复合赋值运算符。

其中与算术运算有关的'复合运算符是:+=,—=,x=,/=,%=。

两个符号之间不可以有空格,复合赋值运算符的优先级与赋值运算符的相同。

表达式n+=1等价于n=n+1,作用是取变量n中的值增1再赋给变量n,其他复合的赋值运算符的运算规则依次类推。

如求表达a+=a—=axa的值,其中a的初值为12。

步骤:(1)先进行“a—=axa“运算,相当于a=a—axa=12—144=—132。

(2)再进行“a+=—132“运算,相当于a=a+(—132)=—132—132=—264。

C语言赋值运算符与赋值表达式2其一般形式为:变量=表达式例如:x=a+bw=sin(a)+sin(b)y=i+++--j赋值表达式的功能是计算表达式的值再赋予左边的变量。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档