<>一 运算基础
运算的本质是根据已有数据,进行各种运算处理,得到新的数据。所以,运算的基础就是数据。在数据的表示方法中,声明的变量只是一个空的指代,并没有和具体的数据进行关联。如果要使用变量,就要把数据和变量进行关联,让指代具体化。
<>1.变量赋值
将变量与数据相关联,明确变量指代关系。
同理,变量声明只是告诉程序有一个数据,但数据还未知,还要将获取的赋值给变量,建立明确的指代关系,在C语言中,变量获取值的方式有以下两种:
<>a.用户输入
常见的变量赋值方式,获取用户输入值的方式有多种,如:scanf()、getchar()
函数scanf()常用的占位符:
函数scanf()除了可以获取单个输入值,还可以获取多个输入值。scanf(“占符位,占符位……”,&输入内容1,&输入内容2,……)。括号中第一个逗号为分隔符,分隔符可以是任意的,但是在程序中使用啥,用户输入时就要使用啥分隔,并且要注意中/英输入法要一致。
<>b.等号赋值
再声明变量时,用“=”为变量赋值
如: sizeof = 2
可以先声明变量再赋值,也可以声明时赋值
<>2.表达式
表达式由数值、运算符等按照特定规则排列构成的组合。
例:sizeof = 8 该表达式称为赋值表达式。赋值表达式包含了操作数(sizeof、8)与赋值运算符“=”两部分
<>a.最简单的表达式
常数和变量,但在程序中不能直接书写常数或变量。如果直接书写常数没意义,如果直接书写变量,系统显示未被定义。
<>b.表达式的值
表达式运算后的值,赋值运算中,将数值赋给变量就是一次运算。
<>c.表达式的数据类型
表达式的数据类型根据运算的值来确定。
<>3.多个表达式
表达式不仅可以单个使用,还可以利用运算符逗号让多个表达式组合起来使用,并将这个组合起来使用的表达式称为逗号表达式。
例:表达式1,表达式2,表达式3,……,表达式n; 运算顺序从左向右依次计算,整个式子的值、数据类型都与最后运算的子表达式的值、类型一致。
<>二.数值处理
在c语言中,数值处理包括整数、小数的各种运算处理,如算术运算、扩展赋值、增量/减量运算、正/负运算等。
<>1.算术运算
又称四则运算,包括加减乘除。在C语言中运算符:加法+、减法-、乘法*、除法/,等
<>a.加法运算符(+)
二目运算符,拥有两个操作数。可让两个数值或变量进行相加运算。
<>b.减法运算符(-)
二目运算符,拥有两个操作数。可让两个数值或变量进行相减运算。
<>c.乘法运算符(*)
二目运算符,拥有两个操作数。可让两个数值或变量进行相乘运算。
<>d.除法运算符(/)
二目运算符,拥有两个操作数。可让两个数值或变量进行相除运算(除数不能为0)
<>e.求余运算符(%)
二目运算符,拥有两个操作数,且两个操作数只能为整数,可让两个数值或变量进行求余运算。
在求余运算时,如果操作数一为正整数,操作数二为负整数,则运算结果为正整数
在求余运算时,如果操作数一为负整数,操作数二为正整数,则运算结果为负数
在求余运算时,如果操作数都为负整数,则运算结果为正整数
<>2.扩展赋值运算
在运算中,有些表达式中操作数和表达式结果相同,例如:a = a * b;这就有些复杂。在C语言中,为了提高效率和简化书写,提供扩展运算符,又称为复合赋值运算符
<>3.增量/减量运算
当按顺序进行一个程序,变量要不断加一,如果使用加法运算符,就会特别麻烦,为了方便 引入增量运算符和碱量运算符。
<>a.增量运算符(++)
一目运算符,拥有一个操作数,且操作数必须是整数和小数类型的变量,让变量自行加运算。根据运算符号的使用位置,该运算符有两种语法形式。
前缀增量运算符会让操作符自增1后再参与其他运算。
后缀增量运算符会让操作符参与计算后,操作符的值再自增1
<>b.减量运算符(–)
一目运算符,拥有一个操作数,且操作数必须是整数和小数类型的变量,让变量自行减运算。根据运算符号的使用位置,该运算符有两种语法形式。
前缀增量运算符会让操作符自减1后再参与其他运算。
后缀增量运算符会让操作符参与计算后,操作符的值再自减1
<>c.使用建议
所在一个表达式中尽量避免多次出现同一类运算。
<>4.正/负运算
正负运算符包含“+”“-”
<>a.正运算符(+操作符)
一目操作符,拥有一个操作符,该运算符一般用于格式上的对齐,并不能让负数变为正数
<>b.负运算符(-操作符)
一目操作符,拥有一个操作符,可以让数字进行负运算,改变数字的正/负。
<>5.数据类型不一致的处理
再C语言中,规定了一下3种针对数据类型不一致的处理方式。
<>a.自动转换
在C语言中,规定在表达式中如果出现数据类型不一致的情况,都必须转换为同一类型数据才能进行运算,而自动转化的方向是由作战存储单元少的数据类型向所占存储单元多的数据类型转换。
<>c.小数运算
在C语言中,双精度类型是小数的默认存储方式。在表达式中如果出现了单精度和双精度两种类型的小数时,计算机会默认将其全部转换为双精度类型来进行运算和保存。
<>d.强制转换
强制转换又称手动转换。有时为了节约存储空间和其它目的,程序员要将数值手动转换为指定的数据类型。例如2.2+3.2,计算机会将其值自动转换为双精度类型,而为了节约存储空间,程序员可以强行将其转换为单精度类型,这样就省了很多存储空间。
强制转换的语法:(类型说明符)(表达式);
再该语法中,类型说明符的小括号是必须存在的,而表达式的小括号可有可无
<>6.运算优先等级
在C语言中,运算要遵守运算符的运算规则,包含优先级与结合性两部分。
<>a.优先级
在算数运算中,当遇到不同优先级的运算时要遵循运算符优先级的先后顺序来进行运算。++与–是最高级;+与-等级最低;使用()可以改变运算顺序。
<>b.结合性
在运算中如果运算符优先级相同,就要遵循运算符的结合性来进行运算。运算符的结合性分为左结合与右结合,左结合性的执行顺序是从左向右,如四则运算符都是左结合的。右结合性执行顺序是从右向左的,如增量运算符。
<>7.数值比较
在C语言中,提供数值比较的专用运算符——数值比较运算符。
二目运算符,两个操作符,可以用两个操作符进行比较。将使用数值比较运算符构建的表达式称为关系表达式。
关系表达式的语法如下:操作数1 比较运算符 操作数2;
在C语言中,提供了六个数值比较的运算符。
<>三.位运算
计算机的运算基础是二进制数的运算。所以在C语言中,也提供了关于二进制的运算符,并将其称为位运算
。一个字节(byte)由8位(bit)组成,即8bit=1byte。
<>1.逻辑位运算
在二进制运算中,会涉及逻辑处理的运算。在C语言中,位逻辑运算符包括取反运算符(~)、位与运算符(&)、位或运算符(|)、异位或运算符(^)4种
<>a.取反运算符
取反运算符(~)属于一目运算符,拥有一个操作数。
取反运算符的语法:~ 操作符
取反运算符可以将数值转换为二进制数后按位取反,即0变1,1变0。
<>b.位于运算符
位于运算符(&)属于二目运算符,拥有两个操作数。
位于操作符语法:操作数1&操作数2;
位于运算符可以将数值转换为二进制数后按位进行与运算。其运算规则是将两个二进制数的对应位的值进行比较,如果这两个对应位的值都为1时,则运算结果为1
,否则运算结果为0.
<>c.位或运算符
位或运算符(|)属于二目运算符,拥有两个操作数。
位或运算符的语法:操作数1 | 操作数2
位或运算符可以将数值转换为二进制数后按位进行或运算。其运算规则是
将两个二进制数的对应位的值进行比较,如果这两个对应位的值都为0时,则运算结果为0,否则运算结果为1
<>d.位异或运算符
位异或运算符(^)属于二目运算符,拥有两个操作数。
位异或运算符的语法:操作数1 ^ 操作数2
位异或运算符可以将数值转换为二进制数后按位进行位异或运算。其运算规则时
将两个二进制数的对应位的值进行比较,如果这两个对应位的值相同时,则运算结果为0,反之则为1
<>2.移位运算
在C语言中,移位运算符包括左移运算符(<<) 与 右移运算符(>>) 两种。
<>a.左移运算符(<<)
二目运算符,两个操作符,且操作符数1表示要左移的数值,操作数二表示要左移的位数。
左移运算符语法:操作数1 << 操作数2
左移运算符可以将数值转换为二进制后按位进行左移运算。其运算规则是将二进制数向左移动,右侧空下的位用0补全。。
例如:1110000100<<4变为0001000000
<>b.右移运算符(>>)
二目运算符,拥有两个操作数,且操作符数1表示要右移的数值,操作数二表示要右移的位数。
右移运算符的语法:操作数1>>操作数2
右移运算符可以将数值转换为二进制数后按位进行右移运算。其运算规则是将二进制数向右移动,左侧空下的位用0补全。
例如:100110000>>4变为000010011.
<>3.位运算优先级
当书写同一个表达式中,如果同时出现多个位运算符,一定要注意运算符优先级。
在位运算中,除了取反运算符(~)为右结合的,其他几个位运算符都为左结合的。
<>4.位运算扩展赋值运算
在C语言中,提供了5种位运算扩展赋值运算符。位运算扩展赋值运算符是将位运算符与赋值运算符结合使用的。所有的运算扩展赋值运算符都是右结合的。
<>四.文本处理
文本数据包含很多文本信息。文本信息可以用来区分和记载数据。在C语言中,文本数据会以字符类型被存放。字符类型数据首先要被转换为整数类型数据,然后才能对其进行运算。所以,字符类型数据运算的本质就是字符对应的ASCII值的运算。
**char类型数据要先被转换为int类型数据后,才能对其进行运算。
<>五.状态处理
状态数据一般用于存放某种状态。一般状态数据包括真或假两种状态。在编程中,默认使用1表示真,使用0表示假。在C语言中,提供了4种对状态数据进行处理的运算符。
<>1。条件运算符(?:)
三目运算符,三个操作数,并根据操作数1的状态选择运算值。如果操作1的状态为真,则运算值为操作数2;如果操作数1的状态为假,则运算值为操作数3.
<>2.逻辑运算符
在C语言中提供了三种逻辑运算符,即逻辑与、逻辑或及逻辑非。逻辑运算符可以用与判断是否符合条件,然后进行逻辑运算。
<>a.逻辑与运算符(&&)
二目运算符,拥有两个操作数。
逻辑与运算符的语法:操作数1 && 操作数2
其中,操作数1、2都属于条件表达式。如果这两个状态都为真,则运算值为真,反之则为假。
<>b.逻辑或运算符(||)
二目运算符,两个操作符
逻辑或运算符语法:操作数1 || 操作数2
其中,操作数1、2都为条件表达式。如果这两个操作数中至少有一个操作数的状态为真,则运算值为真,反之则为假。
<>c.逻辑非运算符(!)
一目运算符,一个操作数
逻辑非运算符语法:!操作数
其中,操作数属于条件表达式。如果这个操作数的状态为真,则运算值为0(假),如果这个操作数的状态为假,则运算值为1(真)
将使用逻辑运算符连接起来的表达式称为逻辑表达式。
<>d.短路原则
在C语言中提供了短路原则,以减少逻辑与运算符、逻辑或运算符的运算量。短路原则是指
如果通过第一个操作数就能够算出结果,计算机就不会再对第二个操作数的状态真假进行判断,而会直接得出运算结果
<>e.逻辑运算优先级
在表达式中,如果同时出现多个逻辑运算符,一定要注意逻辑运算符优先级。
<>六.运算符总结
<>1.运算符优先级汇总
运算符优先级决定了计算机的运算顺序。只有正确使用运算符,才能保证计算机的正确识别和计算。
<>2.数据类型转换规则
在C语言中,当对操作数进行计算或存储时,都要保证所有操作数的数据类型相同。如果操作数的数据类型不同,就要进行转换。在转换时一定要注意以下规则:
(1)如果参与运算的操作数的数据类型不同,则要先将其转换成同一个数据类型,才能进行运算。
(2)必须是所占存储单元少的数据类型向所占存储单元多的数据类型转换,并保证数据类型转换后的数据精度不降低。
(3)若两种数据类型所占的字节数相同,且一种数据类型有符号,另一种数据类型无符号,则要将有符号数据类型转换成无符号数据类型
(4)所有的小数运算都是以双精度类型进行的
(5)当char类型和short类型数据参与运算时,必须将她们都转换为int类型后再进行运算。
(6)在赋值运算中,当赋值运算符两边操作数的数据类型不同时,计算机会自动将右边操作数的数据类型转换为左边操作数的数据类型。在这个转换过程中,如果左边操作数所占存储单元少于右侧操作数所占存储单元,则会降低转换后数据的精度,并丢失部分数据。
(7)数据类型在强制转换时,要注意强制转换后的数据所占存储单元的多少,避免存储时数据发生溢出,造成数据丢失。