【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); // 输出 25return 0;
}

1.3 /

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

#include <stdio.h>
int main()
{float x = 6 / 4;int y = 6 / 4;printf("%f\n", x); // 输出 1.000000printf("%d\n", y); // 输出 1return 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.500000printf("%d\n", y); // 输出 1return 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; // 2return 0;
}

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

#include<stdio.h>
int main()
{printf("%d\n", 12 % 7);      // 5printf("%d\n", -12 % -7);    // -5printf("%d\n", -12 % 7);     // -5printf("%d\n", 12 % -7);     // 5return 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.rhkb.cn/news/363728.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Navicat连接Oracle出现Oracle library is not loaded的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 使用Navicat链接Oracle的时候,出现如下提示:Oracle library is not loaded. 截图如下所示: 2. 原理分析 通常是由于缺少必需的 Oracle 客户端库或环境变量未正确配置所致 还有一种情况是 32位与64位的不匹配:Navica…

【数据可视化技术】1、如何使用Matplotlib和Seaborn库在Python中绘制热力图

热力图是一种数据可视化技术&#xff0c;可以显示变量之间的相关性。这个代码段是数据分析和可视化的常用方法&#xff0c;特别适合于展示变量之间的相关性&#xff0c;对于数据科学和机器学习项目非常有帮助。 1、 导入必要的库 首先&#xff0c;确保你已经安装了matplotlib…

javaSE知识点整理总结(上)

目录 一、面向对象 1. 类、对象、方法 2.面向对象三大特征 &#xff08;1&#xff09;封装 &#xff08;2&#xff09;继承 &#xff08;3&#xff09;多态 二、常用类 1.Object类 2.Array类 3.基本数据类型包装类 4.String类 5.StringBuffer类 6.Math类 7.Random…

WAIC2024 | 华院计算邀您共赴2024年世界人工智能大会,见证未来科技革新

在智能时代的浪潮汹涌澎湃之际&#xff0c;算法已成为推动社会进步的核心力量。作为中国认知智能技术的领军企业&#xff0c;华院计算在人工智能的广阔天地中&#xff0c;不断探索、创新&#xff0c;致力于将算法的潜力发挥到极致。在过去的时日里&#xff0c;华院计算不断探索…

Mac可以读取NTFS吗 Mac NTFS软件哪个好 mac ntfs读写工具免费

在跨操作系统环境下使用外部存储设备时&#xff0c;特别是当Windows系统的U盘被连接到Mac电脑时&#xff0c;常常会遇到文件系统兼容性的问题。由于Mac OS原生并不完全支持对NTFS格式磁盘的读写操作&#xff0c;导致用户无法直接在Mac上向NTFS格式的U盘或硬盘写入数据。下面我们…

SpringBoot:使用Spring Batch实现批处理任务

引言 在企业级应用中&#xff0c;批处理任务是不可或缺的一部分。它们通常用于处理大量数据&#xff0c;如数据迁移、数据清洗、生成报告等。Spring Batch是Spring框架的一部分&#xff0c;专为批处理任务设计&#xff0c;提供了简化的配置和强大的功能。本文将介绍如何使用Spr…

排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)

欢迎来到我的Blog&#xff0c;点击关注哦&#x1f495; 前言 排序是一种基本的数据处理操作&#xff0c;它涉及将一系列项目重新排列&#xff0c;以便按照指定的标准&#xff08;通常是数值大小&#xff09;进行排序。在C语言中&#xff0c;排序算法是用来对元素进行排序的一系…

【高性能服务器】服务器概述

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ 服务器概述 服…

DDMA信号处理以及数据处理的流程---聚类

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…

静态链表详解(C语言版)

顺序表和链表的优缺点 顺序表和链表是两种基本的线性数据结构&#xff0c;它们各自有不同的优缺点&#xff0c;适用于不同的应用场景。 顺序表&#xff08;Sequential List&#xff0c;通常指数组&#xff09; 优点&#xff1a; 随机访问&#xff1a;可以通过索引快速访问任…

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

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

Java对象类辨识指南:Object与Objects类的区别详解

今天在写lambda表达式时&#xff0c;用filter来做过滤判断我的结果是否为null时使用到了Objects.nonNull&#xff0c;但是敲着敲着发现不对劲&#xff0c;怎么没有nonNull方法?? 其实时我少敲了一个s&#xff0c;当时自己并没有很清楚Object和Objects两者之前的区别&#xf…

Ansible-综合练习-生产案例

斌的招儿 网上教程大多都是官网模板化的教程和文档&#xff0c;这里小斌用自己实际生产环境使用的例子给大家做一个详解。涉及到一整套ansible的使用&#xff0c;对于roles的使用&#xff0c;也仅涉及到tasks和files目录&#xff0c;方便大家快速上手并规范化管理。 0.环境配置…

波音危机:星际客机飞船故障,宇航员被困太空!马斯克的SpaceX的“龙”飞船来救援?

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 在人类探索宇宙的漫漫征途中&#xff0c;波音公司的“星际客机”承载着无限的希望与梦想&#xff0c;却也面临着前所未有的挑战。从原计划的8天…

pdf已加密如何解除?解密密码的两个方法【可加密】

电脑文件加密的目的就是保护重要信息&#xff0c;防止数据泄露。如果需要解除密码&#xff0c;应该如何操作呢&#xff1f;pdf已加密如何解除&#xff1f;本文整理了以下两种解除文件方法&#xff0c;希望能够帮到有需要的朋友们&#xff01; 方法一、使用金舟文件夹加密大师解…

实验八 T_SQL编程

题目 以电子商务系统数据库ecommerce为例 1、在ecommerce数据库&#xff0c;针对会员表member首先创建一个“呼和浩特地区”会员的视图view_hohhot&#xff0c;然后通过该视图查询来自“呼和浩特”地区的会员信息&#xff0c;用批处理命令语句将问题进行分割&#xff0c;并分…

c语言--指针

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理c语言中指针的相关知识点。 指针概念 指针存储的就是数据的地址。 直观理解: 李华家是北洋路130号1单元101 用变量处理数据: 我们去李华家拿数据。 用指针处理数据: 我们去北洋路130号1单元101拿数据…

【嵌入式DIY实例】-Nokia 5110显示BME280传感器数据

Nokia 5110显示BME280传感器数据 文章目录 Nokia 5110显示BME280传感器数据1、硬件准备与接线2、代码实现本文将介绍如何使用 ESP8266 NodeMCU 板(ESP12-E 模块)和 BME280 气压、温度和湿度传感器构建一个简单的本地气象站。 NodeMCU 从 BME280 传感器读取温度、湿度和压力值…

Java学习 - 布隆过滤器

前置需求 需求 已经有50亿个电话号码&#xff0c;现在给出10万个电话号码&#xff0c;如何快速准确地判断这些电话号码是否已经存在&#xff1f; 参考方案 通过数据库查询&#xff1a;比如MySQL&#xff0c;性能不行&#xff0c;速度太慢将数据先放进内存&#xff1a;50亿*8字…

6.优化算法之模拟

1.替换所有的问号 . - 力扣&#xff08;LeetCode&#xff09; class Solution {public String modifyString(String s) {char[] sss.toCharArray();int nss.length;for(int i0;i<n;i){if(ss[i]?){for(char cha;ch<z;ch){if((i0||ss[i-1]!ch)&&(in-1||ss[i1]!c…