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

输出结果:
C语言学习19:操作符详解_第1张图片

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

输出结果:
C语言学习19:操作符详解_第2张图片

右移操作符 移位规则:
逻辑移位 左边用 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;
}

输出结果:
C语言学习19:操作符详解_第3张图片

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 语句

你可能感兴趣的:(C语言学习笔记,c语言,开发语言,后端)