当前位置: 首页 > news >正文

计算机408考研先导课---C语言难点

        以下为小编在重温C语言时,容易犯错的一些点,希望列出来对大家有一定帮助!

一、整型变量数的范围

类型说明符长度(字节)数的范围
int4/2(有些为4字节,有些为2字节)-32768~32767
short2-2^{15}~2^{15}-1
long4-2^{31}~2^{31}-1
unsigned 4/20~65535
unsigned short20~65535
unsigned long40~2^{32}-1

注意:

1、unsigned即为无符号数,int数的范围给的是2字节情况下的

2、printf中,均用%d表示

3、浅浅的为初学者推导一下为什么数的范围是这样的:

        首先,在计算机中,数是以补码的形式存储,原因在于,使用补码,可以将符号位和数值域进行统一的处理;同时,加法和减法当中用补码也可以进行统一的处理(CPU当中只有加法器),此外,尤其是补码与原码的运算过程是可以进行相互转换的。

        其次,原码是以首位为符号位,0代表正数,1代表负数,正数的补码与原码相同,而负数需要先将数值位取反,再进行+1操作,才能得到补码。

        众所周知,2字节即为16位,去掉符号位,还剩15位。我们很容易想到7fff为最大的整数,即32767,大家肯定很好理解,8001代表的是-32767,但其实最小的整数补码形式为8000,即-32768,它不能用取反加一的结论得出,我们要用补码的定义式得出:即[X]补=X(X>=0);[X]补=X+2^{n}(X<0,n为补码的位数)。

 4、可能会存在溢出的情况,请注意数的范围

比如说以下这段代码就会溢出,请大家想想计算机最后算出的结果为多少?

#include<stdio.h>int main() {short i = 90787;short j =-345635;printf("i=%d,j=%d", i,j);return 0;
}

        首先对于i,它是一个short类型的,只有16位,也就是说,超过32767就会溢出。我们可以先将90787转换为2进制,然后保留后面的16位,就能得到。这里要注意,是16位全部,而不只是数据位15位。也就是说如果short i=65535;(二进制补码为01,1111,1111,1111,1111)我们要舍弃掉高位,保留低位,然后再将补码转换为原码,输出数值-1。大家可以下去验算一下,90787最后输出的结果为25251。同理,对于j,我们先化为二进制补码,再舍弃最高位,保留低16位,转为原码,得到最终结果。

5、强制转换

        会算溢出了,这几个整型变量间的强制转换也自然而然的会算,无非就是舍弃高位,将剩余的补码改为原码。

二、几个容易出错和遗忘的表达式

1、自增,自减表达式

i++、i--:使用i之后,再让i的值增加1或减少1

++i、--i:使用i之前,让i的值先增加1或减少1

举一个小小的例子:

#include<stdio.h>int main() {short i = 2;short j = 3; printf("i=%d,j=%d", i++,--j);return 0;
}

运算结果:i=2,j=2

记忆小技巧:符号在后边的表示最后再做这个符号运算

2、逗号表达式

形式:表达式1,表达式2

求法:先求表达式1,再求表达式2,最后结果为表达式2的值

#include<stdio.h>int main() {int a;a=((a=3*5,a=a+5),a*4);printf("a=%d",a);return 0;
}

分析:先计算a=3*5,即a=15。然后算出a=a+5,即20。最终a的结果为a*4,即80

注意:

1、逗号表达式可以扩展为表达式1、表达式2……、表达式n

2、逗号表达式的优先级最低

3、强制转换运算符

表达式:(类型名)(表达式)

例如:(double)a、(int)(x+y)、(float)(5%3)

三、浮点数表示

        这个对于没有学过计算机组成与设计的同学来说,可能有一点难理解,小编尽可能给大家讲明白。首先,我们先讲一点简单的,对于浮点型常量,我们有两种表达形式:一种是我们通俗易懂的小数,另一种是指数形式。

        但是要特别注意,对于科学计数法,字母e(或者E)之前必须有数字,且E后面的指数必须为整数,例如:1e3、1.8e-3、123e-6这些都是正确的表达式。

        不过我们更喜欢将它“规范化”,这样也看得舒服点。例如123.456,可规范化描述为1.23456e2。

        紧接着,我们俩谈一下浮点型数据是如何存储的。浮点型数据一般在内存中占4个字节,即32位,这32位从前到后分为符号部分、指数部分以及尾数部分。其中符号占据1位,指数占据8位,尾数部分占据23位。其中最为复杂的是指数8位用原码表示,并且需要减去一个偏移量127(学过移码的肯定很熟悉),也就是说指数为0111,1111仅仅代表指数为0。同时,尾数为了节省空间,是做了规范化的,它把小数点前的那个1给省略掉了,需要大家自己去“补上”。

        行嘞,估计大家乍一看,发现自己根本看不懂。我们做一个转换的例子,大家可能看了之后就明白了。

请将 11010101,01000101,00000000,00000000转换为小数

首先,符号位1,代表这是一个负数 

其次,指数部分为10000011,它代表的十进制数为1+2+128=131,再减去127偏移量,即4

再者,对于尾数部分,需要自己补上一个1,即1.1000101000000000……,再考虑一下指数为4,即小数点往右边移4位11000.10100000……,算出来的十进制数为24.625

        特别注意:float在c语言中,有效位为7位,这是指整数部分与小数部分一共7位,因为单精度用23位存储,加上1位隐藏位,满足10^{7}<2^{23+1}<10^{8},同理,双精度位数为52位,有效位是16位。这也是为什么输入3.6,输出3.600000的原因。

#include<stdio.h>int main() {float a=3.6;printf("a=%f",a);return 0;
}

 好的,本期的博客就到此结束啦,祝愿大家在考研的路上越走越顺!

                

相关文章:

计算机408考研先导课---C语言难点

以下为小编在重温C语言时&#xff0c;容易犯错的一些点&#xff0c;希望列出来对大家有一定帮助&#xff01; 一、整型变量数的范围 类型说明符长度&#xff08;字节&#xff09;数的范围int4/2&#xff08;有些为4字节&#xff0c;有些为2字节&#xff09;-32768~32767short2…...

K8S 部署 Redis-Cluster 集群

本文使用 bitnami 镜像部署 redis-cluster 官方文档&#xff1a;https://github.com/bitnami/charts/tree/main/bitnami/redis-cluster 添加 bitnami 仓库 helm repo add bitnami https://charts.bitnami.com/bitnami自定义 values.yaml storageClass&#xff1a;集群的存储…...

[oeasy]python0089_大型机的衰落_Dec小型机崛起_PDP_VAX网络

编码进化 回忆上次内容 上次 回顾了 计算机存储单位的演变 最小的读写单位 是 bit 8-bit 固定下来 成为了字节(Byte) 位数容量8-bit1Byte1024Byte1 KB1024 KB1 MB1024 MB1 GB1024 GB1 TB 存储字符时 第1位 是 标志位后7位 是 ascii具体的值 可以用 1Byte 存储 计算机之间 …...

Apache Shiro与Spring Security对比

Apache Shiro VS Spring Security 1.Spring Security 官方文档&#xff1a;https://spring.io/projects/spring-security#overview介绍&#xff1a; Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spr…...

23春招-mysql事务相关高频面试题

1、什么是事务 对于一个事务&#xff0c;要么事务内的sql全部执行&#xff0c;要么都不执行 2、 事务的特性ACID 原子性 整个事务中所有的操作要么全部提交成功&#xff0c;要么全部失败会滚。 一致性 数据库总是从一个一致性状态转换到另一个一致性状态。假如有三个sql语句…...

天线理论知识1——基础概念介绍

基础概念介绍 文章目录 基础概念介绍前言一、主要参数二、天线的种类三、天线的测量前言 天线是用于发射和接收电磁波设备。其功能可以概括为转换自由空间中的电磁波和设备中的导行波。 一、主要参数 天线设计中要考虑的参数较多,包括 方向性函数:距离天线 r r r处的远区…...

【云原生之Docker实战】使用Docker部署StackEdit在线Markdown编辑器

【云原生之Docker实战】使用Docker部署StackEdit在线Markdown编辑器 一、StackEdit介绍1.StackEdit简介2.StackEdit中文版简介3.StackEdit中文版功能二、检查本地Docker环境1.检查系统版本2.检查系统Docker版本3.检查docker compose版本三、下载StackEdit镜像四、部署StackEdit…...

特征工程:特征构造以及时间序列特征构造

数据和特征决定了机器学习的上限&#xff0c;而模型和算法只是逼近这个上限而已。由此可见&#xff0c;特征工程在机器学习中占有相当重要的地位。在实际应用当中&#xff0c;可以说特征工程是机器学习成功的关键。 那特征工程是什么&#xff1f; 特征工程是利用数据领域的相关…...

单master部署简要步骤

准备多台服务器&#xff0c;选定一台为master例如设置ip为192.168.0.10,host: k8s.master&#xff0c;其他分别为 k8s.s11 192.168.0.11k8s.s12 192.168.0.12....hostname可以使用命令配置hostname k8s.masterip解析可以在hosts文件中写入&#xff0c;如果有内部dns解析可以在内…...

【算法基础】(一)基础算法 --- 前缀和与差分

✨个人主页&#xff1a;bit me ✨当前专栏&#xff1a;算法基础 &#x1f525;专栏简介&#xff1a;该专栏主要更新一些基础算法题&#xff0c;有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下&#xff0c;互相监督打卡学习 &#x1f339; &#x1f339; &#x1f3…...

c++提高篇——stack容器

一、stack容器的基本概念 stack是一种先进后出(FILO)的数据结构&#xff0c;它只有一个出口。栈中只有顶端的元素才可以被外界使用。因此该容器不能有遍历行为。基本的结构如下&#xff1a; stack容器有些像手枪子弹的弹夹&#xff0c;其数据的出入栈可以以弹夹为参考。 二、…...

HTTP安全与HTTPS协议

目录 Http协议的安全问题 常见的加密方式 防止窃听 单向散列函数 单向散列值的特点 加密与解密 对称加密与非对称加密 对称加密的密钥配送问题 密钥配送问题的解决 非对称加密 前言&#xff1a; 公钥与私钥 非对称加密过程 混合密码系统 前言&#xff1a; 混合…...

【c++】类和对象4—c++对象模型和this指针

文章目录成员变量和成员函数分开存储this指针的用途空指针访问成员函数const修饰成员函数成员变量和成员函数分开存储 在c中&#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 #include<iostream> using namespace std;class Person1…...

嵌入式Qt 开发一个视频播放器

上篇文章&#xff1a;嵌入式 Qt开发一个音乐播放器&#xff0c;使用Qt制作了一个音乐播放器&#xff0c;并在OK3568开发板上进行了运行测试&#xff0c;实际测试效果还不错。 本篇继续来实现一个Qt视频播放器软件&#xff0c;可以实现视频列表的显示与选择播放等&#xff0c;先…...

阿里巴巴内网 Spring Cloud Alibaba 强势来袭,开创微服务的新时代

Spring Cloud 发展史 Spring Cloud 从 15 年的 3 月份推出之后&#xff0c;迅速在 Java 微服务生态中&#xff0c;成为开发人员的首选技术栈。 Spring Cloud 在 Spring Boot 的基础上&#xff0c;保留 Java 开发习惯&#xff0c;加入分布式特性&#xff0c;提供了一系列通用工…...

边界检测方法总结

1&#xff1a;经典的边界检测方法有sobel&#xff0c;拉普拉斯&#xff0c;canny等。 sobel&#xff1a; def get_sobel(in_chan, out_chan):filter_x np.array([[1, 0, -1],[2, 0, -2],[1, 0, -1],]).astype(np.float32)filter_y np.array([[1, 2, 1],[0, 0, 0],[-1, -2, -…...

Softing dataFEED OPC Suite Extended新版本支持从XML文件中读取生产数据

Softing dataFEED OPC Suite Extended V5.25的新功能——“文件读取&#xff08;File Read&#xff09;”&#xff0c;支持访问XML文件中可用的过程数据。 &#xff08;文件读取功能支持获取由XML文件提供的过程数据&#xff09;dataFEED OPC Suite Extended是用于OPC通信和云连…...

央行罚单!金融机构被罚原因揭秘

近日&#xff0c;人民银行公布了2023年首批行政处罚罚单&#xff0c;引发业内广泛关注。 顶象防御云业务安全情报中心统计了人民银行官网&#xff0c;2020年1月至2023年2月10日期间&#xff0c;公布的101份行政处罚。 统计显示&#xff0c;16家金融机构被罚27066.9万元&#…...

js中var、let、const详解

首先 var、let、const 在项目开发中都是用来声明变量的&#xff0c;在ES5中只有两种声明变量的方法&#xff1a;var和function&#xff0c;在ES6中新增了 let、const、class、import 四种声明变量的方法&#xff0c;本文主要讲解 var、let 与 const 的语法&#xff0c;其他的大…...

【数据库】MySQL概念知识语法-基础篇(DCL),真的很详细,一篇文章你就会了

目录通用语法及分类DCL&#xff08;数据控制语言&#xff09;管理用户查询用户权限控制函数字符串函数数值函数日期函数流程函数约束外键约束多表查询一对多多对多一对一通用语法及分类 ● DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...