【C语言】--操作符详解

🌭个人主页: 起名字真南

🍿个人专栏:【数据结构初阶】 【C语言】

目录

  • [1 算术操作符](#1 算术操作符)
    • [1.1 + 和 -](#1.1 + 和 -)
    • [1.2 *](#1.2 *)
    • [1.3 /](#1.3 /)
    • [1.4 %](#1.4 %)
  • [2 赋值操作符 :=](#2 赋值操作符 :=)
    • [2.1 复合赋值符](#2.1 复合赋值符)
  • [3 单目操作符](#3 单目操作符)
    • [3.1 ++和- -](#3.1 ++和- -)
  • [4 强制类型转换](#4 强制类型转换)
  • [5 printf 和 scanf](#5 printf 和 scanf)
    • [5.1 printf](#5.1 printf)
      • [5.1.1 基本用法](#5.1.1 基本用法)
      • [5.1.2 占位符](#5.1.2 占位符)
      • [5.1.3 占位符列举](#5.1.3 占位符列举)
      • [5.1.4 输出格式](#5.1.4 输出格式)

1 算术操作符

C语言中为了方便运算,提供了一系列的操作符,而其中有一组操作符叫做:算数操作符。分别是 + -、*、 / %

注:操作符也叫做运算符。

1.1 + 和 -

+- 是用来做加法和减法的。
+- 都是有两个操作数的,位于操作符两端的就是他们的操作数,这种操作符也叫做双目操作符。

c 复制代码
int main()
{
	int x = 100 + 100;
	int y = 50 - 42;
	printf("%d\n", x);
	printf("%d\n", y);

	return 0;
}

1.2 *

运算符 * 用来运算乘法。

c 复制代码
#include <stdio.h>
int main()
{
 	int num = 5;
 	printf("%d\n", num * num); // 输出 25
 	return 0;
}

1.3 /

/ 用来运算除法
除号两端如果都是整数,执行的是整数除法,得到的结果也是整数。

c 复制代码
#include <stdio.h>
int main()
{
 	float x = 6 / 4;
 	int y = 6 / 4;
 	printf("%f\n", x); // 输出 1.000000
	 printf("%d\n", y); // 输出 1
 	return 0;
}

我们可以看到,虽然变量x的类型是 float(浮点型),但是6 / 4得到的结果1.0,而不是1.5.原因就在于C语言里面的都是整数除法,只会返回整数部分,舍弃小数部分。

那如果想得到浮点型的运算结果应该怎么办呢?我们上面说到如果两端都是整数会执行整数除法,所以我们只需要将两端的操作数变成浮点型就可以得到浮点型的结果。
两个运算数必须至少有一个浮点数

c 复制代码
#include <stdio.h>
int main()
{
	float x = 6.0 / 4;
	int y = 6 / 4;
	printf("%f\n", x); // 输出 1.500000
	printf("%d\n", y); // 输出 1
	return 0;
}

把6换成 6.0或者把 4换成4.0都可以得到想要的结果。

在看一个例子:

c 复制代码
int main()
{
	int x = 5;
	x = (x / 10) * 100;
	printf("%d", x);
	
	return 0;
}

输出结果:

稍微一看可能觉得输出的结果是50,可是结果却是0,是因为因为/的两端都是整数所以进行的是整数除法只保留小数点以前的数,所以 0*100 = 0,而我们想得到50只需要把10改成10.0。

那么可不可以把100改成100.0呢?

结果:

我们可以看到结果依旧是0,这是为什么呢?在这里我们就要考虑到一个算数优先级的问题,在这个式子中是从左到右进行计算,所以先算除法,但是除法两端的操作数都是整数所以得到的是0导致最后的结果也是0。所以我们应该注意将合适的数字改成浮点型。

1.4 %

运算符 %表示进行模运算,即返回两个整数相除的余数,这个运算符只能用于整数,不能用用于浮点数。

c 复制代码
include <stdio.h>
int main()
{
 	int x = 8 % 6; // 2
 	return 0;
}

负数求模的规则是根据第一个运算数的符号来确定结果的正负。

c 复制代码
#include<stdio.h>
int main()
{
	printf("%d\n", 12 % 7);      // 5
	printf("%d\n", -12 % -7);    // -5
	printf("%d\n", -12 % 7);     // -5
	printf("%d\n", 12 % -7);     // 5
	return 0;
}

2 赋值操作符 :=

在变量创建的时候给一个初始值叫做初始化,在变量创建好后,在给一个值叫做赋值。
赋值操作符 ' = '是一个可以随时给变量赋值的操作符

c 复制代码
	int a = 1;//初始化
	a = 2;//赋值,这⾥使⽤的就是赋值操作符

2.1 复合赋值符

在写代码的时候我们可能用到对一个变量进行自增自减的操作

c 复制代码
#include<stdio.h>
int main()
{
	int a = 1;
	a = a + 1;
	a = a - 1;
	return 0;
}

在C语言中提供了更加方便的写法:

c 复制代码
#include<stdio.h>
int main()
{
	int a = 1;
	a += 1;
	a -= 1;
	return 0;
}

C语⾔中提供了复合赋值符,⽅便我们编写代码,这些赋值符有:

c 复制代码
	//1  +=     -=  
	//2  *=     /=     %=
	//下面的以后会解释
	//3 >>=    <<=
	//4 &=     |=      ^=

3 单目操作符

前⾯介绍的操作符都是双⽬操作符,有2个操作数的。C语⾔中还有⼀些操作符只有⼀个操作数,被称
为单⽬操作符。 ++、--、+(正)、-(负) 就是单⽬操作符的。

3.1 ++和- -

++是⼀种⾃增的操作符,⼜分为前置++和后置++,--是⼀种⾃减的操作符,也分为前置- -和后置- -.

a++(后置加加) ++a(前置加加) a--(后置减减) --a(前置减减)

c 复制代码
int main()
{
	int a = 10;
	int b = a++;
	printf("a = %d b = %d", a, b);
}

大家可以猜一下输出的结果

代码结果:

我们可以看到a的值是11,b的值是10。这是为什么呢?

首先我们要先了解前置和后置的区别,顾名思义前置就是在前面,先进行操作,后置就是在后面,后进行操作。我们这里用到的是后置。所以是先使用后操作,先使用a = 10的值赋给b在进行自增操作a ++ = a +1。
--的操作方法和逻辑与++相同

4 强制类型转换

操作符中还有⼀种特殊的操作符是强制类型转换,语法形式很简单,形式如下:

代码:

c 复制代码
	int a = 3.14
	//因为a是整形 3.14是浮点型,类型不一致有的编译器会报错

为了避免这样的错误我们可以进行强制类型转换

c 复制代码
	int a = (int)3.14
	//将3.14强制转换成整数类型,这样只会保留整数部分

注意:除非特殊情况下,尽量不要使用

5 printf 和 scanf

5.1 printf

5.1.1 基本用法

printf()的作用是将参数文本输出到屏幕上。其中的f代表format(格式化),表示可以定制输出文本的格式。
printf() 是在标准库的头⽂件stdio.h 定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这个头⽂件。

c 复制代码
#include<stdio.h>
int main()
{
	printf("Hello C");

	return 0;
}

这样就会在屏幕上输出一行 " Hello C ",并且光标会到末尾,如果想让光标到下一行则可以在末尾加上 \n

5.1.2 占位符

printf()可以在输出文本中指定占位符。

而所谓的" 占位符 ",就是这个位置可以被代替。

c 复制代码
#include <stdio.h>
int main()
{
 	printf("There are %d peoples\n", 2);
 	return 0;
}

上⾯⽰例中, There are %d peoples\n 是输出⽂本,⾥⾯的 %d 就是占位符,表⽰这个位置要⽤其他值来替换。占位符的第⼀个字符⼀律为百分号 % ,第⼆个字符表⽰占位符的类型, %d 表⽰这⾥代⼊的值必须是⼀个整数。

printf() 的第⼆个参数就是替换占位符的值,上⾯的例⼦是整数 2 替换 %d 。执⾏后的输出结果就是 There are 2 peoples 。

输出文本里面可以出现多个占位符:

c 复制代码
printf("%s says you are %d years old","nan",18);

上面的示例中我们可以看到有两个占位符 %d%s ,其中%s就是用来打印字符串的占位符,对应的参数分别是 %s 对应 "nan" %d 对应 18 他们的顺序不能改变,如果一个语句中的占位符多于参数个数,那么就会出错进而输出内存中的任意值。

5.1.3 占位符列举

printf() 的占位符有许多种类,与 C 语⾔的数据类型相对应。下⾯按照字⺟顺序,列出常⽤的占位符,⽅便查找,具体含义在后⾯章节介绍。

  • %a : ⼗六进制浮点数,字⺟输出为小写。
  • %A : ⼗六进制浮点数,字⺟输出为⼤写。
  • %c : 字符
  • %d : 十进制整数
  • %e : 使⽤科学计数法的浮点数,指数部分的 e 为小写。
  • %E : 使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
  • %i : 整数,基本等同于 %d 。
  • %f : ⼩数(包含 float 类型和 double 类型)。
  • %g : 6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e
    为⼩写
  • %G : 等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。
  • %hd : ⼗进制 short int 类型。
  • %ho : ⼋进制 short int 类型。
  • %hx : ⼗六进制 short int 类型。
  • %hu : unsigned short int 类型。
  • %ld : ⼗进制 long int 类型。
  • %lo : ⼋进制 long int 类型。
  • %lx : ⼗六进制 long int 类型。
  • %lu : unsigned long int 类型。
  • %lld : ⼗进制 long long int 类型。
  • %llo : ⼋进制 long long int 类型。
  • %llx : ⼗六进制 long long int 类型。
  • %llu : unsigned long long int 类型。
  • %Le : 科学计数法表⽰的 long double 类型浮点数。
  • %Lf : long double 类型浮点数。
  • %n : 已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
  • %o : 八进制整数
  • %p : 指针
  • %s : 字符串
  • %u : 无符号整数
  • %x : 十六进制整数
  • %zd : size_t 类型
  • %% : 打印一个百分号

5.1.4 输出格式

printf() 可以定制占位符的输出格式。

相关推荐
不去幼儿园26 分钟前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
Mr_Xuhhh28 分钟前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
Ajiang28247353041 小时前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
盼海1 小时前
排序算法(五)--归并排序
数据结构·算法·排序算法
幽兰的天空1 小时前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou5 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
----云烟----6 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024067 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic7 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端