C++负数、小数如何保存
负整数
正整数直接按照源码存储,负整数按照补码存储。
原码、反码、补码
首先要清楚原码、反码、补码:
计算机中一个字节为8位,在此以一个字节为例:
原码:
十进制1:0000 0001
十进制-1:1000 0001(负数的符号位为1)
反码:
十进制1:0000 00001
十进制-1:1111 1110(除符号位外,其余反转)
补码:
十进制1:0000 00001
十进制-1:1111 1111(负数的补码为负数的反码+1)
因此,正数的原码、反码、补码相同,负数的原码、反码、补码各不相同。
反码、补码作用
引入补码,是为了计算负数的加法,也可以看做减法。比如10-1,如果按原码计算的话:
(0000 1010 + 1000 0001) = 1000 1011 = -11,错误。
因此需要使用补码进行计算:
(0000 1010 + 1111 1111) = 1 0000 1001 = 0000 1001 = 9。
引入反码、补码是为了更容易的计算减法。可以将减法看做加一个负数,然后取负数的补码进行计算。
计算机以补码的形式存储小数。
范围
对于单字节无符号整形,占8位,范围为:0000 0000~1111 1111,即0~255。
对于单字节有符号整形,占8位,正数范围为:0000 0001~0111 1111,即1~127,
负数范围为:1000 0001~1111 1111,即-1~-127。
小数
参考:
https://blog.csdn.net/ACdreamers/article/details/19012279?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control&dist_request_id=1328603.58325.16151918506269985&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control
小数的整数、小数部分分别用二进制表示:
如6.75转换为二进制:6转换为0110,0.75转换为:11。所以6.75可以表示为(0110.11)2
小数的存储
小数的存储分为3位:符号位、指数位、尾数位。
符号位:0:正数,1:负数
指数位:127+指数转为二进制数
尾数为:小数转为二进制数后,用科学计数法表示后的尾数
如173.8125转换为二进制:10101101.1101,用科学计数法表示为:1.01011011101*10^7。则符号位为0,指数位为:(127+7)2,即10000110,尾数位为:01011011101。则173.8125在计算机中存储为:
0 1000 0110 0101 1011 1010
C++负数、小数如何保存相关推荐
- C++四则运算(带负数小数,不含大数)
思路就是定义运算符栈和操作数栈,用逆波兰式的思想完成四则运算 细节: 1.用map标记运算符优先级,用stringstream从字符串中读取操作数 2.stringstream可能有无法分辨字母和数字 ...
- Java程序和MySQL数据库中关于小数的保存问题
文章目录 MySQL 中的小数类型 decimal double float Java 中的小数类型 float double BigDecimal 金额的计算 MySQL 中的小数类型 decima ...
- 计算机中浮点数的表示及正负数小数的反码补码
1. 计算机中浮点数的表示 计算机中浮点数用科学计数法来表示,分尾数.指数.阶码3部分. 阶符:指数的正负号.占1位,负为1正为0. 任意一个二进制数N,N=2P×S,其中S为尾数,P为阶码,阶码为固 ...
- [数制与码制]: 有关十进制转换和二进制负数小数补码表示
文章目录 关于十进制转换 关于二进制负小数补码表示 关于十进制转换 数电第一课,关于各进制数的转换:2,8,16进制的转换也不用说什么,主要是关于10进制转换其他进制会麻烦一点: 而在这之间,由其他进 ...
- liunx php apache2,linux apache2部署php
android-plugmgr源代码分析 android-plugmgr是一个Android插件加载框架,它最大的特点就是对插件不需要进行任何约束.关于这个类库的介绍见作者博客,市面上也有一些插件加载 ...
- Java基本语法和规范
Java基本语法和规范 语言按程序的执行方式分为编译型和解释型两种. 编译型:需要使用专门的编译器,针对特定平台(操作系统)翻译成可被该平台执行的机器码,编译生成的可执行程序可以脱离开发环境在特定平台 ...
- 计算机中浮点数的表示,浮点数在计算机中的表示
浮点数在计算机中的表示 最后编辑于:2010-4-13 计算机中数字是以0和1二进制保存的,我们熟悉的是整数的如何在计算机中表示,那么浮点数是如何表示的呢? 一. 转换 我们先来看看如何将十进制 ...
- 102道java算法
1:奥运奖牌计数 import java.util.Scanner; //输入n+1行,第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金.银.铜牌数目,以一个空格分开 //输出1 ...
- Web网站测试流程和方法(转载)
1测试流程与方法 1.1测试流程 进行正式测试之前,应先确定如何开展测试,不可盲目的测试.一般网站的测试,应按以下流程来进行: 1)使用HTML Link Validator将网站中的错误链接找出来: ...
最新文章
- STM32 电机教程 15 - BLDC 速度环内嵌电流环
- RxSwift之深入解析map操作符的底层实现
- python自动化开发例子_Python自动化开发从浅入深-语言基础(常用模块)
- 精彩回顾|2021 中国 .NET 开发者峰会
- DateFormat(炸窝)
- git统计当前项目代码行数
- Centos7-Mysql-5.6.41一主两从的搭建
- python2.7初学(〇)
- mysql备份恢复中的常见错误
- matlab_exercise(2)----输入一个三位数,依次输出其个位数字,十位数字,百位数字...
- VC Studio集成开发环境下编译Apache--jin点滴实验手记
- window下的批处理命令学习
- 修改word默认模板(Normal.dotm)
- Why Service Mesh
- 生存分析-Cox回归模型
- html5游戏 美术,cocos2d-html5游戏学习之绘画小熊
- 清默网络——动态访问列表
- 《指数基金投资指南》读书笔记---指数基金的分类
- 【STM32H7教程】第52章 STM32H7的LTDC应用之点阵字体和字符编码(重要)
- 给定两点确定一条直线