C语言学习19:操作符详解

目录

1.操作符种类
1.1 算术操作符
1.2 移位操作符
1.3 位操作符
1.4 赋值操作符
1.5 单目操作符
1.6 关系操作符
1.7 逻辑操作符
1.8 条件操作符
1.9 逗号表达式
1.10 下标引用
1.11 函数调用
1.12 访问结构成员

1.操作符种类

1.1 算术操作符
+-*/%
取余

温馨提醒:

除去 " % " 操作符 之外的 其他操作符 均可用于 整数浮点数 的运算。
" / " 操作符两个操作数 都为 整数 ,执行 整数除法 。而只要有 浮点数 执行的就是 浮点数除 法。
" % " 操作符两个操作数 必须为整数,返回的 是整除之后的 余数

例:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

#define two 2
#define five 5

int main()
{
	printf("add = %d\n", five + two);// 5 + 2 =7
	printf("sum = %d\n", five - two);// 5 - 2 =3
	printf("mul = %d\n", five * two);// 5 × 2 =10
	printf("div = %d\n", five / two);// 5 ÷ 2 = 2余1
	printf("rem = %d\n", five % two);// 5 ÷ 2 余 1,所以为1

	return 0;
}

输出结果:
在这里插入图片描述

1.2 移位操作符
<<>>
左移操作符右移操作符

温馨提醒:

左移操作符 移位规则:左边 抛弃 、右边 补0

例:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	unsigned int num = 0x80000001;// 二进制:1000 0000 0000 0000 0000 0000 0000 0001
	int change = 0;

	printf("%d\n", sizeof(int));// int型占用4个字节
	printf("%x\n", num);// 二进制:1000 0000 0000 0000 0000 0000 0000 0001
	printf("%x\n", num << 1);// 二进制(左移一位):0000 0000 0000 0000 0000 0000 0000 0010

	return 0;
}

输出结果:
在这里插入图片描述

右移操作符 移位规则:
逻辑移位 左边用 0 填充,右边 抛弃
算术移位 左边用原该值的 符号位 填充,右边 抛弃

逻辑移位:

1111 1111 1111 1111 1111 1111 1111 1111
下面是向右位移一位的结果
0111 1111 1111 1111 1111 1111 1111 1111

算术移位:

假设以下为 -1 的补码
“1”(符号位)111 1111 1111 1111 1111 1111 1111 1111(该位丢弃)
下面是向右位移一位的结果
“1”(用原该值的符号位填充)111 1111 1111 1111 1111 1111 1111 1111

温馨提醒:移位运算符不要移动负数位!例:

int num = 10;
num >> -1;// 这种用法错误
1.3 位操作符
&>>>>
按位与按位或按位异或
“有0则0”“有1则1”“相同0相异1”

温馨提醒:他们的操作数必须是整数!例:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	int num1 = 2;// 0010
	int num2 = 4;// 0100
	printf("%d\n", num1 & num2);// 0010 & 0100 = 0000
	printf("%d\n", num1 | num2);// 0010 & 0100 = 0110
	printf("%d\n", num1 ^ num2);// 0010 & 0100 = 0110

	return 0;
}

输出结果:
在这里插入图片描述

1.4 赋值操作符
+=-=*=/=%=>>=<<=&=|=^=

例:

int weight = 120;// 体重
weight = 89;// 重新赋值
double salary = 10000.0;// 浮点型
salary = 20000.0;// 使用赋值操作符赋值
1.5 单目操作符
!-+&~- -++*(类型)
逻辑反操作负值正值取地址对一个数的二进制按位取反前置、后置- -前置、后置++间接访问操作符(解引用操作符)强制类型转换
1.6 关系操作符
>>=<<=!===
大于大于等于小于小于等于测试“不等”测试“相等”

" == " 和 " = "不一样!前者是判断是否相等,后者是赋值

1.7 逻辑操作符

&& 逻辑与,都为正结果为真
|| 逻辑或,都为假结果为假

1 & 2----->0
1 && 2---->1
1 | 2----->3
1 || 2---->1
1.8 条件操作符
exp1 ? exp2 : exp3

例:

if (a > 5)
        b = 3;
else
        b = -3;

// 相当于以下:
b = (a > 5 ? 3 :-3);
1.9 逗号表达式
exp1, exp2, exp3, …expN

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果,例:

// 代码1
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);// 逗号表达式
// c是多少?c = 13

// 代码2
if (a =b + 1, c=a / 2, d > 0)

//代码3
a = get_val();
count_val(a);
while (a > 0)
{
         // 业务处理
        a = get_val();
        count_val(a);
}

// 如果使用逗号表达式,改写:
while (a = get_val(), count_val(a), a>0)
{
         // 业务处理
}
1.10 下标引用

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

例:

int arr[10];// 创建数组
arr[9] = 10;// 实用下标引用操作符。
 // []的两个操作数是arr和9。
1.11 函数调用

( ) 函数调用操作
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

例:

#include <stdio.h>
 
void test1()
{
	printf("hehe\n");
}

void test2(const char *str)
{
	printf("%s\n", str);
}

int main()
{
 	test1();            // 实用()作为函数调用操作符。
 	test2("hello bit.");// 实用()作为函数调用操作符。
 	return 0;
}
1.12 访问结构成员

. 结构体.成员名
-> 结构体指针->成员名

例:

#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;
}


—————————END—————————

往期回顾

★C语言学习14:选择结构_if 语句

★C语言学习15:循环结构_while语句

★C语言学习16:循环结构_for语句

★C语言学习17:循环结构_do…while语句

★C语言学习18:选择结构_switch 语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

學不董Gavin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值