操作符的基本概念

1.算术操作符

+           -          *           /          %

加        减        乘        除        取模(余数)

需要注意的点:

1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。

2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。例如:5/2 结果 = 2.....1,实际结果为2,当除数和被除数中有一个是小数(浮点数),得到的结果就是小数。

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

2.移位操作符

<<                                >>

左移操作符                右移操作符

移位操作符的操作数只能是整数,移动的是二进制,这里就需要拓展一点知识

原码 反码 补码

c语言中整数储存的类型是整型int,四个字节,32位比特位,二进制存储。

整型 - 15        首符号为0代表正数,首符号位1代表负数

正数的原码 反码 补码都相同

15 - 原码 - 00000000000000000000000000001111

15 - 反码 - 00000000000000000000000000001111

15 - 补码 - 00000000000000000000000000001111

负数         -15        负数的首符号为1

-15         原码        10000000000000000000000000001111

- 15        反码        111111111111111111111111111111110000        (符号位不变(1),其他位按位取反(1变0,0变1))        

- 15        补码        111111111111111111111111111111110001        (反码 + 1)

<<       左移操作符

左移操作符将储存在计算机里的二进制位左边抛弃一位,右边补一位0

因为整数在计算机里存储的是二级制补码,所以需要知道补码来进行操作

 需要注意的是,a 向左移后赋值给 b ,a 是没有发生变化的,他的值还是4

当a时负数时

 注意,打印的时候使用的是他的原码        

>>        右移操作符

右移分为俩种:

1. 逻辑移位 左边用0填充,右边丢弃

2. 算术移位 左边用原该值的符号位填充,右边丢弃

一般的编译器使用的是算术移位

3.位操作符

&                                |                        ^

按位与                 按位或                按位异或

&

按位与,补码中双方有一方为0即为0,双方都为1才为1 

按位或

按位或,补码中双方有一方为1即为1,双方都为0才为0

按位异或

按位异或规则为,相同为0,异同为1  

4.赋值操作符

+=        -=         *=        /=        %=        >>=        <<=        &=        |=        ^=

赋值操作符的含义基本都是一样的,比如

	(a += 1) = (a = a + 1)

可以使代码简略更直观。 

5.单目操作符

! — 逻辑反操作 

int a = 0;
	while (!a) //a = 0,为假,while循环不执行,使用逻辑反操作符后为真
	{
		printf("666");
	}

- —负值        + — 正值       

& — 取地址       

当变量存储时会开一个地址,&可以访问他们的地址

++ — 前置后置++        --  — 前置后置-- 

当 ++后置时先使用后++(+1)

int a = 0;
	printf("%d\n", a++);//打印0
	printf("%d", a);//打印1

当++前置时先++(+1)后使用

	int a = 0;
	printf("%d\n", ++a);//打印1

      * — 解引用操作符

"*"的作用是引用指针指向的变量值,引用其实就是引用该变量的地址,“解”就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为“解引用”。也就是说,解引用是返回内存地址中对应的对象。

比如:

int a = 10;
	int* p = &a;
	*p;//指向地址所在的变量
	p;//指向地址

sizeof — 操作数的类型长度(以字节为单位)        

~   —   对一个数的二进制位按位取反

int a = 0;
	//00000000000000000000000000000000补码
	a = ~a;
	//取反为11111111111111111111111111111111补码
	//-1得反码 11111111111111111111111111111110
	// 取反得原码 10000000000000000000000000000001
	printf("%d", a);//结果为 - 1
	return 0;
}

6.关系操作符

>                >=                <                <=                   !=             ==

大于        大于等于        小于        小于等于        不相等        相等

7.逻辑操作符

&&                        ||

逻辑与                逻辑或                        直白点就是并且        和        或者         的意思

例如年龄,大于等于0并且小于18的时候,就是未成年

 

 

需要注意的是,当逻辑与第一个条件判断为假时,后面的条件便不会去执行。

当逻辑或的第一个条件为真时,后面的条件也不会去判断。

例如:(1为真,0为假)

 

 当a = 0时为假,后续不会再判断,只判断了第一个条件,判断完后a++

 一共判断4次,当条件为真时,后续判断就会继续执行,当为假时,停止判断。

8.条件操作符(三目操作符)

格式为:

exp1 ? exp 2 : exp 3

 当 exp1 为真时,执行exp2

当exp2 为假时,执行exp1

 用一个 if 语句来换算一下就很容易理解了

	if (a > b)
	{
		printf("%d\n", a);
	}
	else
	{
		printf("%d\n",b);
	}

	a > b ? printf("%d\n",a) : printf("%d\n",b);	

9.逗号操作符

逗号表达式,就是用逗号隔开的多个表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果。

例如

从左向右依次执行,最后一个表达式的结果为整个表达式的结果

int a = 1;
int b = 2;
int c =(a>b, a=b+10, a, b=a+1)

10.下标引用操作符、函数调用和结构成员

[ ]  -  下标引用操作符,操作数是一个数组名 + 一个索引值

int arr[0] = {1,2,3,4,5};
arr[2] == 3;
//arr == 数组名 
//2 == 索引值

() -  函数调用操作符接收一个或多个操作数。第一个操作数是函数名,其余的是传递给函数的参数

void test1()
{
    printf("666");
}
//test1 == 函数名,此函数没有传参,所以没有其他操作数

int test2(int x,int y)
{
    return x + y;
}
//tets2 == 函数名,x 和 y  为传递给函数的参数

.          用法:结构体 . 成员名   

->       用法:结构体 -> 成员名

struct Stu
{
	char name[10];
	int age;
	char sex;
};
int main()
{
	struct Stu stu;
	struct Stu* pstu = &stu;
	stu.age = 20;
	pstu->age = 20;
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值