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

C语言操作符详解

目录

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、付费专栏及课程。

余额充值