C语言中操作符详解

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

C语⾔中操作符详解
C语⾔的操作符共分为算术操作符,移位操作符,位操作符,赋值操作符,单⽬操作符,关系操作符,逻辑操作符,条件操作符,逗号表达式,下表引⽤、函数调⽤和结构成员这10⼤类。

1.算术操作符
此类操作符由 +(加), -(减), *(乘), /(整除), %(求模)这5个组成,由于它们的计算规则和我们的数学中所学的⼤致相同,所以是⽐较容易理解的。

只有以下3点需要注意:1.除了 % 操作符之外,其他的⼏个操作符可以作⽤于整数和浮点数。

2.对于 / 操作符如果两个操作数都为整数,执⾏整数除法。

⽽只要有浮点数执⾏的就是浮点数除法。

3.% 操作符的两个操作数必须是整数,返回的是整除之后的余数。

2.移位操作符
此类操作符只有 <<(左移操作符)和 >>(右移操作符)。

(我们要知道整数在内存中存的是⼆进制补码。


(1).左移操作符移位规则:
左边抛弃,右边补0
(2).右移操作符移位规则:
⾸先右移运算分两种:
逻辑移位,左边⽤0填充,右边丢弃
算术移位,左边⽤原该值的符号位填充,右边丢弃
注:对于移位运算符,不要移动负数位,这个是标准未定义的。

3.位操作符
⾸先位操作符有 & (按位与), | (按位或), ^ (按位异或)【注:他们的操作数必须是整数】
整数在内存中是以⼆进制补码形式存储的,所以我们在计算这三个操作符时,应该先将⼗进制数转换为⼆进制表⽰,然后再将其⼆进制的补码给写出来(正数的补码就是原码本⾝,⽽负数的补码是其反码加1),再进⾏运算。

运算时,按位与即有0为0,全1为1,按位或即有1为1,全0为0,按位异或即相同为0,不同为1。

再计算出结果后我们要注意的是这是的结果是输出⼗进制结果的⼆进制补码形式,所以我们要将其变为⼗进制形式。

正数不变直接将⼆进制改为⼗进制表⽰,若是负数,则需先减1得其反码,再除符号位不变其余位取反得其⼆进制原码,最后将⼆进制改为⼗进制表⽰。

4.赋值操作符
赋值操作符是⼀个很棒的操作符,他可以让你得到⼀个你之前不满意的的值。

也就是你可以⾃⼰重新赋值。

int weight = 120;//体重
weight = 89;//如果对上⾯的体重不满意,就可以重新赋值
//赋值操作符可以继续连续使⽤
int a = 10;
int x = 0;
int y = 20;
a = x = y+1;//连续赋值
复合赋值符:+= , -= , *= ,/= , %= , >>= , <<= ,&=, |=, ^= 。

这些运算符都可以写成复合的效果,⽐如:
int x = 10;
x = x+10;
x += 10;//复合赋值,与上⾯⼀个代码表达意思⼀样,这样写更加简洁
5.单⽬操作符
单⽬操作符包括:! (逻辑反操作),- (负值),+ (正值),& (取地址), sizeof (以字节为单位的操作数的类型长度), ~ (对⼀个数的⼆进制按位取反), -- (前置、后置--),++ (前置、后置++),* (间接访问符即解引⽤操作符), (类型) (强制类型转换) 。

#include <stdio.h>
int main()
{
int a = -10;//赋值
int *p = NULL;//解引⽤操作符
printf("%d\n", !2);//结果为0
printf("%d\n", !0);//⾮0为1
a = -a;//负值
p = &a;//取a的地址存在p中
printf("%d\n", sizeof(a));//结果为4,因为a是int型,所以为4个字节
printf("%d\n", sizeof(int));//结果为4
printf("%d\n", sizeof a);//这样写也可以,结果也是4
printf("%d\n", sizeof int);//这样写是错误的写法
return 0;
}
sizeof和数组:
数组名可以表⽰整个数组的情况:sizeof(数组名) 和 &数组名
数组名可以表⽰⾸元素地址的情况:除了以上两种情况以外的所有情况都是表⽰⾸元素地址
--和++运算符:
//前置++和前置--
#include <stdio.h>
int main()
{
int a = 10;
int x = ++a;
//先对a进⾏⾃增,然后再使⽤a,也就是表达式的值是a⾃增后的值。

x为11。

int y = --a;
//先对a进⾏⾃减,然后再使⽤a,也就是表达式的值是a⾃减后的值。

y为10。

return 0;
}
//后置++和后置--
#include <stdio.h>
int main()
{
int a = 10;
int x = ++a;
//先使⽤a再对a⾃增,这样x的值为10,a变成11。

int y = --a;
//先使⽤a再对a⾃减,这样y的值为11,a变成10。

return 0;
}
6.关系操作符
C语⾔中的关系操作符有: >(⼤于),>=(⼤于等于),<(⼩于),<=(⼩于等于),!=(⽤于测试“不相等”),==(⽤于测试“相等”)。

此类操作符较为简单,就不多说了。

7.逻辑操作符
逻辑操作符有:&&(逻辑与),||(逻辑或)。

区分逻辑与和按位与区分逻辑或和按位或:1&2=0,1&&2=1; 1|2=3,1||2=1。

8.条件操作符
exp1 ? exp2 : exp3 (即若表达式exp1成⽴,则返回表达式exp2,若表达式exp1不成⽴,则返回表达式exp3)。

如:b = (a>5) ? 3 : -3; //表⽰如果a>5成⽴,则b值为3,若a>5不成⽴,则b值为-3。

9.逗号表达式
exp1, exp2, exp3, ...expN
逗号表达式,就是⽤逗号隔开的多个表达式。

逗号表达式,从左向右依次执⾏。

整个表达式的结果是最后⼀个表达式的结果。

//代码1
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b = a+1);//逗号表达式
//结果c为13
//代码2
if(a = b+1, c = a/2, d>0)
//就相当于 if(d>0)
10.下标引⽤、函数调⽤和结构成员
(1). [ ]下标引⽤操作符
操作数:⼀个数组名 + ⼀个索引值
int arr[10];//创建数组
arr[9] = 10;//实⽤下标引⽤操作符
//[ ] 的两个操作数是arr和9。

(2). ()函数调⽤操作符,接受⼀个或者多个操作数:第⼀个操作数是函数名,剩余的操作数是传递给函数的参数
#include <stdio.h>
void sheena1()
{
printf("hello\n");
}
void sheena2()
{
printf("%s\n",str)
}
int main()
{
sheena1(); //实⽤()作为函数调⽤操作符
sheena2("hello word!");//实⽤()作为函数调⽤操作符 return 0;
}
(3).访问⼀个结构的成员
.结构体.成员名
->结构体指针->成员名
#include <stdio.h>
struct Stu
{
char name[10];
int age;
char sex[5];
double score;
};
void set_age1(struct Stu stu)
{
stu.age = 18;
}
void set_age2(struct Stu* pStu)
{
pStu->age = 18;//结构成员访问
}
int main()
{
struct Stu stu;
struct Stu* pStu = &stu;//结构成员访问
stu.age = 20;//结构成员访问
set_age1(stu);
pStu->age = 20;//结构成员访问
set_age2(pStu);
return 0;
}。

相关文档
最新文档