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

news2024/11/25 18:37:06

🌭个人主页: 起名字真南
🍿个人专栏:【数据结构初阶】 【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() 可以定制占位符的输出格式。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Processing入门教程

目录&#xff1a; 课程前言认识PROCESSING 关于像素图形代码色彩与填充练习交互关于setup()和draw()第一次进行移动进一步复杂的交互操作代码实现如下&#xff1a;进一步了解PROCESSING 变量使用变量系统内置变量条件语句逻辑运算符循环语句while循环for循环结构化 函数实参对…

信息系统项目管理师(项目整合管理)补充

项目管理信息系统&#xff1a;给项目提供了IT软件工具&#xff0c;例如进度计划软件工具、工作授权系统、配置管理系统、信息收集与发布系统&#xff0c;或其他基于IT技术的工具。以及进入其他在线信息系统&#xff08;如知识库&#xff09;的登录界面&#xff0c;支持自动收集…

如何解决跨国视频会议卡顿问题

在全球化日益加深的今天&#xff0c;跨国视频会议已成为企业沟通协作的重要工具。然而&#xff0c;许多企业在使用跨国视频会议时&#xff0c;经常会遇到卡顿和延迟问题。这不仅影响会议的顺利进行&#xff0c;还可能对企业的业务决策和项目进度造成不良影响。本文将探讨跨国视…

如何正确使用C#短信接口发送招生短信

群发短信对教育机构来讲虽然是个不错的招生工具,但怎么使用决定着生源转化效率,如果是为了单纯的发短信而发短信效率当然不好,那么如何正确使用招生群发短信呢?技巧才是关键! 教育短信发送较多的就是招生群发短信内容,而运营商对教育行业内容审核一般比较严格,需要短信公司特殊…

前端通过ResizeObserver来监听dom大小动态渲染echarts

export const GlobalResizeObserver (function () {const ATTR_NAME global-resizeobserver-keyconst attrValueToCallback {}function antiShake(fn, delay, immediate false) {let timer null//不能用箭头函数return function () {//在时间内重复调用的时候需要清空之前…

独立开发者系列(12)——下单与支付

做业务有个绕不开的业务逻辑&#xff0c;就是支付。这里总结一个基础的支付电商逻辑闭环流程&#xff0c;完成支付基础体系的实现。这里假定我们要实现的是一个独立的电商平台上允许用户在平台充值&#xff0c;其他的类似多多购物或者淘宝购物的流程逻辑。 数据表结构的逻辑设…

ElementUI搭建使用过程

1.ElementUI概述 Element&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库&#xff0c;相当于是css的框架 2.安装ElementUI 第一步&#xff1a;创建一个vue-cil项目 &#xff01;&#xff01;&#xff01;&#xff08;上篇文章已详细讲述搭建过…

线性代数知识点搜刮

求你别考太细... 目录 异乘变零定理 行列式转置 值不变 重要关系 中间相等&#xff0c;取两头 特征值公式 向量正交 点积为0 拉普拉斯定理 矩阵的秩 特征值和特征向量 |A|特征值的乘积 & tr(A)特征值的和 要记要背 增广矩阵 异乘变零定理 某行&#xff08;…

智能工业网络,需要何种工业以太网交换机作为支撑?

随着工业企业数字化及信息化的进一步深化升级&#xff0c;工业领域相关控制及信息系统的业务类型不断增加、复杂性不断提升&#xff0c;工业控制网络与工业信息网络也呈现融合趋势&#xff0c;具备支持多业务、多协议、多厂商设备和数据的互联互通、共网承载以及高质量传输能力…

C++ | Leetcode C++题解之第203题移除链表元素

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode* removeElements(ListNode* head, int val) {struct ListNode* dummyHead new ListNode(0, head);struct ListNode* temp dummyHead;while (temp->next ! NULL) {if (temp->next->val val) {…

p6spy 组件打印完整的 SQL 语句、执行耗时

一、前言 我们来配置一下 Mybatis Plus 打印 SQL 功能&#xff08;包括执行耗时&#xff09;&#xff0c;一方面可以了解到每个操作都具体执行的什么 SQL 语句&#xff0c; 另一方面通过打印执行耗时&#xff0c;也可以提前发现一些慢 SQL&#xff0c;提前做好优化&#xff0c…

CVPR 2024 | 双手协作双物体的数据集TACO:引领可泛化手物交互的新方向

论文题目&#xff1a; TACO: Benchmarking Generalizable Bimanual Tool-ACtion-Object Understanding 论文链接&#xff1a; https://arxiv.org/pdf/2401.08399.pdf 项目主页&#xff1a; https://taco2024.github.io/ 视频链接&#xff1a; https://www.youtube.com/watch…

机器学习笔记 人脸识别技术全面回顾和小结(1)

一、简述 人脸识别是视觉模式识别的一个细分问题。人类一直在识别视觉模式&#xff0c;我们通过眼睛获得视觉信息。这些信息被大脑识别为有意义的概念。对于计算机来说&#xff0c;无论是图片还是视频&#xff0c;它都是许多像素的矩阵。机器应该找出数据的某一部分在数据中代表…

OBD诊断(ISO15031) 02服务

文章目录 功能简介请求和响应1、read-supported PIDs1.1、请求1.2、肯定响应 2、read PID value1.1、请求1.2、肯定响应 3、同时请求多个PID4、同时读取多个PID数据 Parameter definition报文示例1、单个PID请求和读取2、多个PID请求和读取 功能简介 02服务&#xff0c;即 Req…

【技术追踪】UNest:一种用于非配对医学图像合成的新框架(MICCAI-2024)

前天看了一篇文章图像分割用diffusion&#xff0c;今天看了篇文章图像合成不用diffusion&#xff0c;你说说这~ 传送门&#xff1a;【技术追踪】SDSeg&#xff1a;医学图像的 Stable Diffusion 分割&#xff08;MICCAI-2024&#xff09; UNest&#xff1a;UNet结构的Transforme…

收银系统源码-千呼新零售【分销商城】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

帮助某服务业公司制定发展战略与未来规划

在集团公司高速发展、业务范围不断扩大时&#xff0c;组织往往对公司未来的发展方向感到迷茫&#xff0c;不知道如何进行更好的规划&#xff0c;找到合适的发展战略&#xff0c;为企业提供更长远的发展空间&#xff0c;带来更多是利益。面对这个问题&#xff0c;华恒智信认为企…

【知识学习】Unity3D中Post Processing的概念及使用方法示例

Unity3D中的Post Processing&#xff08;后处理&#xff09;是一种在渲染管线的最后阶段对最终图像进行处理的技术。它允许开发者添加各种视觉效果&#xff0c;如模糊、颜色分级、镜头光晕等&#xff0c;以增强场景的视觉表现力。 Post Processing 的基本概念 Post Processin…

【递归、搜索与回溯】记忆化搜索

记忆化搜索 1.记忆化搜索2.不同路径3.最长递增子序列4. 猜数字大小 II5.矩阵中的最长递增路径 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603;…

eclipse基础工程配置( tomcat配置JRE环境)

文章目录 I eclipse1.1 工程配置1.2 编译工程1.3 添加 JRE for the project build pathII tomcat配置JRE环境2.1 Eclipse编辑tomcat运行环境(Mac版本)2.2 Eclipse编辑tomcat运行环境(windows版本)2.3 通过tomcat7W.exe配置运行环境(windows系统)I eclipse 1.1 工程配置 …