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。

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

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

相关文章

编程语言的发展趋势和未来方向

1、编程语言的未来&#xff1f; 随着科技的飞速发展&#xff0c;编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心&#xff0c;为程序员提供了与机器沟通的桥梁。那么&#xff0c;在技术不断进步的未来&#xff0c;编程语言的走向又将如何呢&#xff1f; 方…

宋仕强论道之华强北后山寨手机时代(三十六)

今天继续讲华强北山寨手机&#xff0c;跟手机配套周边产品。华强北&#xff0c;作为中国电子产品的集散地和创新中心&#xff0c;一直以来都是电子产品和数码产品的聚集地。在早期&#xff0c;赛格市场以其走私、翻新的电脑和电脑周边产品而闻名。赛格大厦以前5楼以上都是做电脑…

Hive实战:网址去重

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、基于HDFS数据文件创建Hive外部表4、利用Hive SQL实…

11.3编写Linux串口驱动

编写串口驱动主要步骤 构建并初始化 struct console 对象&#xff0c;若串口无需支持 console 可省略此步骤 //UART驱动的console static struct uart_driver virt_uart_drv; static struct console virt_uart_console {//console 的名称&#xff0c;配合index字段使用&…

uniapp 解决安卓App使用uni.requestPayment实现沙箱环境支付宝支付报错

背景&#xff1a;uniapp与Java实现的安卓端app支付宝支付&#xff0c;本想先在沙箱测试环境测支付&#xff0c;但一直提示“商家订单参数异常&#xff0c;请重新发起付款。”&#xff0c;接着报错信息就是&#xff1a;{ "errMsg": "requestPayment:fail [pa…

Archlinux下自启动rclone mount

路径&#xff1a; /etc/systemd/system/rclonemount.service [Unit] Descriptionrclonemount Requiresnetwork-online.target.wants Afteralist.service[Service] Typesimple ExecStartPre/bin/mkdir -p /media ExecStart/usr/bin/rclone mount \aliyun: /media \--config /ro…

Video-GroundingDino论文解读

文章目录 前言一、摘要二、引言三、贡献四、模型结构1、模型定义与问题数据少问题模型解决问题模型模块 2、模型结构模型结构图Cross-Modality Spatio-Temporal EncoderLanguage-Guided Query SelectionCross-Modality Spatio-Temporal DecoderPrediction Heads 总结 前言 之前…

冬天夺去的清爽,可爱,春天都会还给你

这款外套上身可太时尚好看了 春天日常穿着或者出行游玩 应对早晚温差&#xff0c;兼具时尚和温度两不误 干净率性闲适的洒脱范整件衣服干净不失细节 下摆有橡筋收紧更加保暖了工艺方面也毫不逊色&#xff0c;防水拉链 四合扣、猪鼻扣一应俱全简直就是一件实用与时尚并存的…

Grind75第2天 | 238.除自身以外数组的乘积、75.颜色分类、11.盛最多水的容器

238.除自身以外数组的乘积 题目链接&#xff1a;https://leetcode.com/problems/product-of-array-except-self 解法&#xff1a; 这个题有follow up&#xff0c; 要求优化到空间复杂度为O(1)&#xff0c;所以给出baseline和follow up的解法。 Baseline&#xff1a;利用索引…

网络报文分析程序的设计与实现(2024)

1.题目描述 在上一题的基础上&#xff0c;参照教材中各层报文的头部结构&#xff0c;结合使用 wireshark 软件&#xff08;下载地址 https://www.wireshark.org/download.html#releases&#xff09;观察网络各层报文捕获&#xff0c;解析和分析的过程&#xff08;如下 图所示&a…

SpringBoot+Redis实现接口防刷功能

场景描述&#xff1a; 在实际开发中&#xff0c;当前端请求后台时&#xff0c;如果后端处理比较慢&#xff0c;但是用户是不知情的&#xff0c;此时后端仍在处理&#xff0c;但是前端用户以为没点到&#xff0c;那么再次点击又发起请求&#xff0c;就会导致在短时间内有很多请求…

FCN-8s源码理解

FCN网络用于对图像进行分割&#xff0c;由于是全卷积网络&#xff0c;所以对输入图像的分辨率没有要求。本文重点对fcn8s.py中图像降采样和上采样后图像分辨率的变换进行理解。 相关知识 为准确理解图像分辨率的变换&#xff0c;对网络结构中影响图像分辨率变换的几个函数进行…

leetcode:3. 无重复字符的最长子串

一、题目 二、函数原型 int lengthOfLongestSubstring(char* s) 三、思路 本题就是找最长的无重复字符子串。 两层循环&#xff0c;外层循环控制字串的起始位置&#xff0c;内层循环控制字串的长度。 设置一个长度为256且初始为0的hash表&#xff08;因为一共有256个字符…

windows----Vmware虚拟机安装ubuntu

双系统来回切有点麻烦&#xff0c;还是安装虚拟机先整个简单的。 1 安装Vmware17虚拟机 虚拟机下载网址&#xff0c;一直下一步就行&#xff0c;更新和加入计划关闭 秘钥&#xff1a;MC60H-DWHD5-H80U9-6V85M-8280D 2 下载ubantu镜像 浙大镜像&#xff0c;自己选择版本吧&a…

灰色关联分析

&#xff08;相关性分析&#xff09;反映关系有多么紧密 “在系统发展过程中&#xff0c;若两个因素变化的趋势具有一致性&#xff0c;即同步变化程度较高&#xff0c;即可谓二者关联程度较高&#xff1b;反之&#xff0c;则较低。因此&#xff0c;灰色关联分析方法&#xff0…

STM32 ADC采样调试笔记

最近在搞STM32L051系列一个小MCU&#xff0c;要用这个去采集两路ADC作为输入。期间也碰到过一些问题&#xff0c;顺便记录下。 ADC采集原理不说了&#xff0c;主要采集电压&#xff0c;用数字进行细分&#xff0c;这样就可以知道输入电压多少了&#xff0c;网上也有很多相关文…

Spark中的二分类与多分类问题的解决

机器学习中的分类问题是数据科学中的一个重要领域&#xff0c;而在大数据环境中使用Apache Spark来解决二分类和多分类问题可以更好地处理大规模数据。本文将深入探讨如何使用Spark来解决二分类和多分类问题&#xff0c;包括数据准备、模型选择和性能评估等方面。 二分类问题 …

dnSpy调试工具二次开发1-新增菜单

测试环境&#xff1a; window 10 visual studio 2019 版本号&#xff1a;16.11.15 .net framework 4.8 开发者工具包 下载 .NET Framework 4.8 | 免费官方下载 .net 5开发者工具包 下载 .NET 5.0 (Linux、macOS 和 Windows) 利用git拉取代码(源码地址&#xff1a;Gi…

入库和出库的成本对不上如果如何解决

入库是前期手工录入的车价是对的&#xff0c;出库是根据销售出库单生成的 入库成本和出库成本不一致的解决方法 解决方法&#xff1a; 整车管理——正车库存——库存核算——整车出库 成本核算

Marvelous Designer 各版本安装指南

Marvelous Designer下载链接 https://pan.baidu.com/s/1ZZCraq6w2Z4JPisND8q0jA?pwd0531 1.鼠标右击【Marvelous Designer 12(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 Marvelous Designer 12(64bit)】。 2.打开解压后的…