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

🌭个人主页: 起名字真南
🍿个人专栏:【数据结构初阶】 【C语言】

请添加图片描述

目录

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

1 算术操作符

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

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

1.1 + 和 -

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

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

	return 0;
}

1.2 *

运算符 * 用来运算乘法。

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

1.3 /

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

#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语言里面的都是整数除法,只会返回整数部分,舍弃小数部分。
那如果想得到浮点型的运算结果应该怎么办呢?我们上面说到如果两端都是整数会执行整数除法,所以我们只需要将两端的操作数变成浮点型就可以得到浮点型的结果。
两个运算数必须至少有一个浮点数

#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都可以得到想要的结果。
在看一个例子:

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 %

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

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

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

#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 赋值操作符 :=

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

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

2.1 复合赋值符

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

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

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

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

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

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

3 单目操作符

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

3.1 ++和- -

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

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

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 强制类型转换

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

在这里插入图片描述
代码:

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

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

	int a =int3.14
	//将3.14强制转换成整数类型,这样只会保留整数部分

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

5 printf 和 scanf

5.1 printf

5.1.1 基本用法

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

#include<stdio.h>
int main()
{
	printf("Hello C");

	return 0;
}

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

5.1.2 占位符

printf()可以在输出文本中指定占位符。
而所谓的“ 占位符 ”,就是这个位置可以被代替。

#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 。

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

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() 可以定制占位符的输出格式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/755079.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI 音乐生成器 MusicGPT,同声传译StreamSpeech!Web短视频平台Sharine

AI 音乐生成器 MusicGPT&#xff0c;同声传译StreamSpeech!Web短视频平台Sharine。 项目简介 MusicGPT 是一款应用程序&#xff0c;允许在任何平台上以高性能方式本地运行最新的音乐生成 AI 模型&#xff0c;而无需安装 Python 或机器学习框架等严重依赖项。 目前它仅支持 Me…

MySQL中的存储引擎

介绍 存储引擎就是存储数据&#xff0c;建立索引&#xff0c;更新/查询数据等技术的实现方式。存储引擎是基于表的&#xff0c;而不是基于库的&#xff0c;所以存储引擎也可以称为表类型&#xff08;即一个数据库下的表可以选择不同的存储引擎&#xff09;。 1. 如何查看一个…

一些指标的学习

1.平均倒数排名&#xff08;MRR&#xff09; 1.定义 MRR 是衡量检索系统返回的结果列表中第一个相关结果位置的指标。具体来说&#xff0c;它是所有查询倒数排名的平均值。 2.计算步骤 对每个查询&#xff0c;找到第一个正确答案在结果列表中的排名 &#x1d445;&#x1d44…

Python数据库数据的读取

数据库数据的读取 绝大多数公司都会选择将数据存入数据库中&#xff0c;因为数据库既可以存放海量数据&#xff0c;又可以非常便捷地实现数据的查询。本节将以MySQL和SQL Server为例&#xff0c;教会读者如何使用Pandas模块和对应的数据库模块&#xff08;分别是pymysql模块和…

金融科技:重塑用户体验,驱动满意度飙升

随着科技的飞速发展&#xff0c;金融科技&#xff08;FinTech&#xff09;已经深入到我们生活的每一个角落&#xff0c;从日常支付到投资理财&#xff0c;再到跨境汇款&#xff0c;它都在悄无声息地改变着我们的金融行为。而在这背后一个不可忽视的驱动力就是金融科技对用户体验…

短视频视频配:成都柏煜文化传媒有限公司

短视频视频配&#xff1a;​艺术与技术的完美融合 在短视频盛行的当下&#xff0c;一个优秀的短视频作品不仅仅依赖于精彩的内容&#xff0c;更需要在视频配上做足功夫。视频配&#xff0c;作为短视频的重要组成部分&#xff0c;涵盖了音效、配乐、字幕等多个方面&#xff0c;…

Camera Raw:编辑 - 曲线

Camera Raw “编辑”模块中的曲线 Curve面板提供了曲线这一强大的工具&#xff0c;通过精确控制亮度和对比度&#xff0c;以及调整红、绿、蓝通道的曲线&#xff0c;可以显著提升图像的视觉效果和色彩表现。这些调整工具为摄影师和图像编辑者提供了丰富的创意可能性&#xff0c…

ORB-SLAM2同OpenMVS实现三维重建

ORB-SLAM2 位姿导出 Note: 为与OpenMVS进行对接本次进对ORB-SLAM2进行部分修改&#xff0c;使之可以为 OpenMVS提供稀疏点云、关键帧的位姿、内参&#xff0c;以及稀疏点云在各个View 中的可见性。 主要更改如下 . 在Map文件下增添如下函数 public: void Save(const string &a…

Vue+Proj4Leaflet实现地图瓦片(Nginx代理本地地图瓦片为网络url)加载并实现CRS投影转换(附资源下载)

场景 Leaflet中加载离线OSM瓦片地图(使用OfflineMapMaker切割下载离线png地图文件)&#xff1a; Leaflet中加载离线OSM瓦片地图(使用OfflineMapMaker切割下载离线png地图文件)_offline map maker-CSDN博客 Leaflet快速入门与加载OSM显示地图&#xff1a; Leaflet快速入门与…

spring aop 初探

org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#wrapIfNecessary 分析JDK动态代理 生成的代理对象 构造函数&#xff0c;入参为 InvocationHandler public com.sun.proxy.$Proxy164(java.lang.reflect.InvocationHandler) 生成动态代理Class对象&…

Android 遥控器

遥控器源码 import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RadialGradient; import android.graphics.Region; import android.g…

JavaScript(2)——输入输出和执行顺序

目录 JS的输入输出语法 输出&#xff1a; 输入 JS的代码执行顺序 字面量 JS的输入输出语法 输出&#xff1a; document.write(内容)alert(内容) 页面弹出警告框console.log(内容) 控制台输出语法&#xff0c;程序员调试使用 作用&#xff1a;向body输出内容 注意&…

Node.js简介

一&#xff1a;Node.js简介 Node.js是一个跨平台的JavaScript运行环境&#xff0c;使开发者可以搭建服务器端的JavaScript应用程序 作用&#xff1a;使用Node.js编写服务器端程序 编写数据接口&#xff0c;提供网页资源浏览功能有利于前端工程化&#xff0c;可以集成各种开发…

等保测评练习卷14

等级保护初级测评师试题14 姓名&#xff1a; 成绩&#xff1a; 判断题&#xff08;10110分&#xff09; 1. 方案编制活动中测评对象确定、测评指…

【python】OpenCV—Aruco

文章目录 Detect ArucoGuess Aruco Type Detect Aruco 学习参考来自&#xff1a;OpenCV基础&#xff08;19&#xff09;使用 OpenCV 和 Python 检测 ArUco 标记 更多使用细节可以参考&#xff1a;【python】OpenCV—Color Correction 源码&#xff1a; 链接&#xff1a;http…

在 UBUNTU 22.04 上逐步构建 Postal SMTP 服务器

构建 Postal SMTP 服务器来发送批量电子邮件是电子邮件营销人员的不错选择。Postal 功能非常强大&#xff0c;并拥有大量开发人员的支持。它是一个用 JavaScript 和 Ruby 编写的开源邮件服务器脚本。它可用于构建内部 SMTP 服务器&#xff0c;就像 Mailgun、Sendgrid、Mailchim…

【期末速成】计算机操作系统 EP03 | 学习笔记

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️2.1 考点五&#xff1a;进程的概念及特征2.1 考点六&#xff1a;进程的状态与切换 三、总结&#xff1a;&#x1f353;&#x1f353;&#x1f353; 一、前言&#x1f680;&#x1f6…

Why is Kafka fast?(Kafka性能基石)

Kafka概述 Why is kafka fast&#xff1f; 思考一下&#xff0c;当我们在讨论Kafka快的时候我们是在谈论什么呢&#xff1f;What does it even mean that Kafka is fast? 我们是在谈论kafka的低延迟&#xff08;low latency&#xff09;还是在讨论吞吐量&#xff08;through…

快速了解GPT-4o和GPT-4区别

GPT-4o简介 在5月14日的OpenAI举行春季发布会上&#xff0c;OpenAI在活动中发布了新旗舰模型“GPT-4o”&#xff01;据OpenAI首席技术官穆里穆拉蒂&#xff08;Muri Murati&#xff09;介绍&#xff0c;GPT-4o在继承GPT-4强大智能的同时&#xff0c;进一步提升了文本、图像及语…

C语言 | Leetcode C语言题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; int countPrimes(int n) {if (n < 2) {return 0;}int isPrime[n];int primes[n], primesSize 0;memset(isPrime, 0, sizeof(isPrime));for (int i 2; i < n; i) {if (!isPrime[i]) {primes[primesSize] i;}for (int j 0; j < …