C++之基础知识一_c++定点数-程序员宅基地

技术标签: C++成长之路  

基础知识

内存变量原理

掌握赋值内存和寄存器如何配合的

_asm{
     
Mov eax, num;
Add num, 15;
Mov num, eax;
}//寄存器操作

由于cc++变量只是定义之后没有做初始化,是垃圾数据,所以要求变量一开始必须先做初始化,而python/java等语言,定义之后会默认赋值为零。

进制

int num = 012//0是八进制的表示 0x是十六进制

printf

printf不会对数据进行数据类型的转换

数据类型

  1. 二进制的位数不能无限使用,整数有一定的大小限制,只能在一定的范围之内。
  2. 内存可贵,珍惜使用
    在这里插入图片描述

计算机补码表示

-7
原码:1000 0111
反码:1111 1000
补码:1111 1001 F9

为什么要用补码表示呢?
来源于导弹的应用,追求绝对的准确。
对于原码如果正数和负数相加,需要多步操作,而对于补码,一步操作即可。
比如:
0000 1001 +9 原码表示
1000 0010 -2 原码表示
二者相加,需要比较大小,去掉符号,相减,加上符号(四步)
0000 1001 +9 补码表示
1111 1110 -2 补码表示
00000111 +7
二者相加,一步操作即可

float浮点数的二进制存储和转换

float和double在存储方式上都是遵从IEEE的规范
符号位 指数 尾数
余127码 float 1 8 23
余1023码 double 1 11 52
尾数的精度决定了有效数字的精度
float类型是6-7位,因为十进制数字9需要用四位二进制数表示。
实数是带有小数部分和整数部分的数字,也就是我们通常说的小数。
对于小数点,计算机采用了两种表示方法:定点表示法和浮点表示法
1.什么是定点表示法及定点表示法的缺点?
定点表示法:分别使用定长来表示小数和整数部分,这样会存在一个问题。如果分配的小数部分位数较短,存储3.1415926这样的数值时精度太差;反之分配给小数部分的位数较长,那么能表示的整数部分数值范围太小。
2.什么是浮点表示法以及浮点表示法的优点?
浮点表示法:等同于科学计数法,极大增加了实数可存储的范围。
无论十进制还是二进制使用浮点表示法都是由三部分组成:符号 位移量 定点部分
用科学表示法(浮点表示法)表示十进制数字 +3145600000为+3.1456×10^9
符号部分:(+),位移量:9,定点部分:(3.1456)
同理,二进制数据10101100000000.00表示为 +1.01011×2^13
同理,二进制数据-(0.0000000001011)表示为 -1.011×2^(-10)
注意:小数点左边都只保留了一位的非零数码,小数点和定点部分左边的1并没有存储是隐含的。
符号部分采用一个二进制位来存储(0或1)
尾数是指小数点右边的二进制数,定义了该数的精度,尾数是作为无符号整数存储的。如果将符号一起考虑的话可以说是通过符号加绝对值存储的
指数是可正可负的,计算机中使用余码表示法来存储指数
3.什么是余码表示法?
为了让正的和负的整数都可以作为无符号数存储,计算机通常采用余码表示法。在余码系统中,使用一个正整数(称为一个偏移量)加到每个数字中,用于把它们统一移到非负的一边。这个偏移量的值是2^(n-1)-1,n是内存单元存储指数的大小。这种新的表示法与移位前的表示法相比,其优点在于余码系统中的所有整数都是正数,当我们在这些整数上进行比较或运算时不需要考虑符号。

在学习了十进制和二进制的转换之后,对于实数最容易想到的二进制表示方法应该是区分整数部分和小数部分。将一部分字节位给整数部分,整数部分留出最左边一位给符号位,另一部分字节位给小数部分。但是这样会造成空间的浪费,比如4字节 32bit存储空间,16位给整数,16位给小数,那么对于小数部分为0时,整数还是只能用有限的16位空间。

c语言为什么要提前声明变量

 建立变量符号表
 变量的数据类型指示系统分配多少内存空间
 变量的数据类型指示了系统如何解释存储空间的值
 变量的数据类型决定了该变量的取值范围
 不同的数据类型有不同的操作

数据类型转换

自动数据类型转换与强制类型转换

操作符号

在这里插入图片描述
运算符不能相邻,但是±符号除外,因为±3实际是此处是分解为加负3
主要是四类:算数/逻辑/关系/位

赋值表达式

在这里插入图片描述

自增自减运算

在这里插入图片描述

条件运算符的结合方向

在这里插入图片描述
条件运算符的优先级仅大于赋值运算符

逻辑运算符

在这里插入图片描述

printf数据控制

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

scanf

在这里插入图片描述
在这里插入图片描述

scanf只能指定实数输入的宽度,无法指定输入的精度。输出是可以指定的
回车会被当做一个输入

在这里插入图片描述
%n统计字符数量

bool类型

C语言没有bool类型
左移移位预算,越界之后会截取高位,而不是低位

在这里插入图片描述在这里插入图片描述

float浮点数相等判断

float 类型:占4个字节,7位有效数字
double型:占8个字节,15~16位有效数字
由于浮点数的表示是不精确的,所以不能直接比较两个数字是否相等。一般比较的两个数字的差值在允许的某个范围内则认为浮点数相等。比如,两个浮点数a、b, 允许的误差范围 1 e − 6 1e^{-6} 1e6, 即 a b s ( a − b ) < = 1 e − 6 abs(a-b)<=1e^{-6} abs(ab)<=1e6, 则可以认为a和b相等。
float型变量和“零值”比较方法:

#include <stdio.h>  
  
int main(int argc, char *argv[])  
{
      
    float x = 0.000f;  
    const float EPSINON = 0.000001;  
    if (( x >= -EPSINON ) && ( x <= EPSINON ))  
    {
      
        printf("x 是零\n");  
    }  
      
    return 0;  
}  
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37102093/article/details/115282995

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签