C语言程序设计——数学运算

基本运算符

运算符说明例子
=赋值运算符a = b;
+、-、*、/、()基本四则运算a = (a + c) * d;
%取余运算符a = b % 2
&、^、~、l位运算a = ~b l c
>>、<<左移和右移a = b >> 2

在c语言的数学运算中,所涉及到的符号如图所示,在使用过程中应该了解的就是各个符号在同一条语句中的优先级,以及在现实中很少用到的取余运算符的作用。

位运算

个人认为对于位运算的理解很大程度上能够帮助理解计算机的逻辑,所以单独讲一下,以及相关符号的使用。

在计算机中,所有的命令都是0、1来表示的,它代表的是两种情况。我们传输数据是通过电信号来传播的,那么高电平代表1,低电平代表0。从物理上来讲这是最容易实现的传输方式。我印象中在高中物理中也有过类似的扩展,开关的"打开"与"闭合两种状态",假如说有8盏灯来传递我们的信号,那么根据特定排列方式,选择我们需要传递的数字,按照这个数字闭合和打开开关就好了。
全闭合状态是0000 0000
如果我们想要传递一个13,以二进制的传递的话就是0000 1101。只需要闭合这三盏灯的开关,使其亮起,我们就可以接收到传递的信号是13.计算机内部同理。

二进制与十进制

以125为例子
十进制: 1 ∗ 1 0 2 + 2 ∗ 1 0 1 + 5 ∗ 1 0 0 1 * 10^2 +2*10^1+5*10^0 1102+2101+5100
二进制: 1 ∗ 2 6 + 1 ∗ 2 5 + 1 ∗ 2 4 + 1 ∗ 2 3 + 1 ∗ 2 2 + 0 ∗ 2 1 + 1 ∗ 2 0 = 64 + 32 + 16 + 8 + 4 + 1 1*2^6 + 1 * 2^5 +1*2^4+1*2^3+1*2^2+0*2^1+1*2^0 =64+32+16+8+4+1 126+125+124+123+122+021+120=64+32+16+8+4+1
其中十进制的10与二进制中的2叫做位权,那么不同进制间的转换就是位权的变换,他们本身的数值不会发生转换。如果不熟练,就找几个数字多练习几次就很好理解了。

与运算:当进行位运算时,都为1时,结果才为1,出现0结果则为0。就好像我们是同一根电线上的两个开关,只有当我们都闭合的时候,才能通电,一个是打开状态都不可以。在位运算当中,每一个开关都只与自己所处电线的开关进行计算(如下图)。

在第一个例子中5=>101,7=>111。按位进行与运算,两个二进制数中,5的第二位是0所以最后结果也就是101也就是5。
第二个例子中,7=>111,23=>10111。发现23的二进制位要多于7,这个情况下就在111前面补0,然后进行按位与运算
在这里插入图片描述

或运算:与运算你与我都为1结果为1,那么或就是你或我为1,结果就为1.与运算就相当于串联,或运算就相当于并联。
在这里插入图片描述
非运算:可以理解为按位取相反,0的位变成1,1的位变成0。在之前的循环读入中已经接触过了。但是需要一提的是,要注意数据类型的位数,同时在取反的时候符号位也会取反。这里没有把全部位都显示出来。
在这里插入图片描述

异或运算

异或可以理解为理解为一种逆运算,就像a + b = c,那么b = c - a。异或的运算方式为相同为0,不同为1,为什么他是逆运算呢,5^7 = 2, 2^5 = 7,2^7 = 5。也就是两个数异或之后得出来的数,再与原任意一个数异或可以得出另外一个数字。
在这里插入图片描述

小练习

写一个函数,函数功能为交换两个变量的值。

这道题的一般思路就是创建一个临时变量,存储原值,然后再相互赋值完成交换,但是当我们了解了异或之后,完全不用创建中间变量来存储。

#include<stdio.h>int swap(int *a, int *b){*a = *a ^ *b;*b = *a ^ *b;*a = *a ^ *b;return 0;
}
int main(){int a = 2, b = 3;printf("a = %d, b = %d\n", a , b);swap(&a,&b);printf("a = %d, b = %d\n", a , b);
}

在这里插入图片描述
左移“<<”和右移“>>”
顾名思义左移就是把整个二进制数据向左移动,右移就是向右移动。左移右移是二进制环境下进行的,我们假设在十进制环境中163,左移一位就是1630,右移就是16.3下取整就是16。十进制中左移就是乘以10,右移就是除以10。二级制与十进制的区别就是位权发生了变化,那么在计算机中的二进制环境下左移就是乘以2,右移就是除以2(同样也是下取整)。
在这里插入图片描述

数学函数库

头文件: math.h

常用函数常用函数
pow(a,b)fabs
sqrt(n)log(n)
ceil(n)log10(n)
floor(n)acos(n)
abs(n)(stdlib.h)

pow()函数

pow()函数:指数函数头文件:math.h原型: double pow(double a, double b)a:底数b:指数返回值:a的b次幂例子:pow(2,3) = 8

sqrt()函数

sqrt()函数:平方根函数头文件:math.h原型: double pow(double x)x:被开方数返回值:x的平方根例子:sqrt(16) = 4

ceil()函数

ceil()函数:上取整函数头文件:math.h原型: double ceil(double x)x: 某个实数返回值:|x|例子:ceil(4.1) = 5

floor ()函数

floor()函数:下取整函数头文件:math.h原型: double floor(double x)x:某个实数返回值:|x|例子:floor(5.9) = 5

abs()函数

abs()函数:绝对值函数头文件:stdlib.h原型: int abs(int x)x:某个实数返回值:|x|例子:abs(-5) =5 

fabs()函数

fabs()函数:实数数绝对值函数头文件:math.h原型: double fabs(double x)x: 某个实数返回值:|x|例子:fabs(-4.9) = 4.9 

log()函数

log()函数:对数函数头文件:math.h原型: double log(double x)x:某个实数返回值:以e为底的x的对数例子:log(9) = 2.197225...

log10()函数

log10()函数:对数函数头文件:math.h原型: double log10(double x)x:某个实数返回值:以10为底的x的对数例子:log10(1000) = 3

可以通过换底公式求得不同的对数 l o g 2 6 = l o g 10 6 l o g 10 2 log_26 = \frac{log_{10}6}{log_{10}2} log26=log102log106

acos()函数

acos()函数:对数函数头文件:math.h原型: double acos(double x)x:某个实数返回值:返回arccos(x)例子:acos(-1) = 3.1415926...

写一个程序,输入一个数字,输出一个数字的立方根。
这道题需要注意的是,函数的数据类型是double。
在这里插入图片描述

拓展

在上面交换两个变量的值的问题中还可以采用宏的方式。这个采用的思路就是使用中间变量的方式,宏的好处就是运算速度更快,当然也可以在宏当中采用异或的方法。在这里主要是想多展示一下__typeof(),它实际上是内置的一个宏,就是参数的数据类型。
另外就是我们应该也更多的取了解宏的用法。
在这里插入图片描述

取余运算

取余运算在计算机当中最慢的运算,我们可以根据位运算的特性来进行优化。
%2 = n&1
对二取余的话,余数只可能是为1的,至于最后一位相关,所以与1操作就只是关注最后一位的情况
那么同理如果我们对4取余的话,那么就是和最后两位相关,就是&3。

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

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

相关文章

软件测试面试总结分享

第一轮 自我介绍。根据自己的情况扩展。你是怎么理解软件测试的&#xff1f;我觉得软件测试是很重要的岗位&#xff0c;如果一个系统开发完后不通过测试去产品质量把关&#xff0c;产品不能正常运行可能造成的后果&#xff0c;损失钱财、损失时间、损失客户等等&#xff0c;所…

Leetcode刷题笔记题解(C++):无重复字符的最长子串

思路&#xff1a; 利用滑动窗口的思想&#xff0c;用起始位置startindex和curlength来记录这个滑动窗口的大小&#xff0c;并且得出最长距离&#xff1b;利用哈希表来判断在滑动窗口中是否存在重复字符&#xff0c;代码如下所示&#xff1a; class Solution { public:int len…

MySQL之视图内连接、外连接、子查询案例

目录 一.视图 1.1 含义 1.2 操作 二.案例 三.思维导图 一.视图 1.1 含义 虚拟表&#xff0c;查询方面和普通表一样使用。 1.2 操作 1.创建视图&#xff1a; create or replace view 视图名 as 查询语句&#xff1b; 2.视图的修改&#xff1a; 方式1 create or replace view …

keras,一个超酷的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超酷的 Python 库 - keras。 Github地址&#xff1a;https://github.com/keras-team/keras 深度学习已经成为解决各种复杂问题的有力工具&#xff0c;而 Python Keras 是…

小游戏实战丨基于PyGame的俄罗斯方块小游戏

文章目录 写在前面PyGame五子棋注意事项系列文章写在后面 写在前面 本期内容&#xff1a;基于pygame的俄罗斯方块小游戏 下载地址&#xff1a;https://download.csdn.net/download/m0_68111267/88700182 实验环境 python3.11及以上pycharmtkinter PyGame Pygame是一个非常…

在 sealos 上使用 redisinsight 完美管理 redis

先起一个 redis 集群&#xff0c;在 sealos 上可以点点鼠标就搞定&#xff1a; 简单两步&#xff0c;redis 集群搞定。 再启动 RedisInsight, 是一个 redis 的可视化管理工具。 就可以看到部署后的地址了。进去之后填写 redis 的链接信息即可&#xff1a; 链接信息在数据库的…

如何建立标准且有效的评审流程?6个重点

为了进一步提高项目质量&#xff0c;项目评审管理需要遵循一定的标准化流程。而建立标准且有效的评审流程&#xff0c;能够快速提高项目质量和效率&#xff0c;优化团队协作&#xff0c;降低风险&#xff0c;提高项目成功率。如果组织没有建立起标准化的评审流程&#xff0c;就…

信息学奥赛之《向量几何一文通》

Geometry π \pi π&#xff1a; arccos ⁡ ( − 1 ) \arccos(-1) arccos(−1)余弦定理&#xff1a;对于任意三角形&#xff08;三边长为 a , b , c a,b,c a,b,c&#xff09;&#xff0c;则有 c 2 a 2 b 2 − 2 a b cos ⁡ θ c^2a^2b^2-2ab\cos_{\theta} c2a2b2−2abcosθ…

基于Spring-boot-websocket的聊天应用开发总结

目录 1.概述 1.1 Websocket 1.2 STOMP 1.3 源码 2.Springboot集成WS 2.1 添加依赖 2.2 ws配置 2.2.1 WebSocketMessageBrokerConfigurer 2.2.2 ChatController 2.2.3 ChatInRoomController 2.2.4 ChatToUserController 2.3 前端聊天配置 2.3.1 index.html和main.j…

OpenSource - File Preview 文件预览组件

文章目录 file-preview-spring-boot-starterkkFileView file-preview-spring-boot-starter https://github.com/wb04307201/file-preview-spring-boot-starter https://gitee.com/wb04307201/file-preview-spring-boot-starter 一个文档在线预览的中间件&#xff0c;可通过简…

软件测试|Docker Kill/Pause/Unpause命令详细使用指南

简介 Docker是一种流行的容器化平台&#xff0c;提供了各种命令和功能来管理和操作容器。本文将详细介绍Docker中的三个重要命令&#xff1a;kill、pause和unpause。我们将深入了解它们的作用、用法和示例&#xff0c;帮助您更好地理解和使用这些命令。 什么是Docker Kill/Pa…

Linux操作系统基础(12):Linux的Shell解释器

1. Shell的介绍 在Linux中&#xff0c;Shell 是一种命令行解释器&#xff0c;它是用户与操作系统内核之间的接口&#xff0c;它负责解释用户输入的命令&#xff0c;并将其转换成系统调用或其他操作系统能够执行的指令。 Shell 提供了一种交互式的方式来与操作系统进行通信&am…