| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 整数、浮点数在计算机中的存储,-128二进制怎么表示, -> 正文阅读 |
|
[数据结构与算法]整数、浮点数在计算机中的存储,-128二进制怎么表示, |
1 计算机底层存储数据的基本原理????????计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。要想学习编程,就必须了解二进制,它是计算机处理数据的基础。 ????????内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件,实际上就是电路;电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。5V 是通电,用1来表示,0V 是断电,用0来表示。所以,一个元器件有2种状态,0 或者 1。我们通过电路来控制这些元器件的通断电,会得到很多0、1的组合。例如,8个元器件有 28=256 种不同的组合,16个元器件有 216=65536 种不同的组合。虽然一个元器件只能表示2个数值,但是多个结合起来就可以表示很多数值了。 ????????我们可以给每一种组合赋予特定的含义,例如,可以分别用 1101000、00011100、11111111、00000000、01010101、10101010 来表示 C、语、言、中、文、网 这几个字,那么结合起来 1101000 00011100 11111111 00000000 01010101 10101010 就表示”C语言中文网“。一般情况下我们不一个一个的使用元器件,而是将8个元器件看做一个单位,即使表示很小的数,例如 1,也需要8个,也就是 00000001。1个元器件称为1比特(Bit)或1位,8个元器件称为1字节(Byte),那么16个元器件就是2Byte,32个就是4Byte,以此类推。我们平时使用计算机时,通常只会设计到 KB、MB、GB、TB 这几个单位,PB 和 EB 这两个高级单位一般在大数据处理过程中才会用到。
????????所以,在内存中没有abc这样的字符,也没有gif、jpg这样的图片,只有0和1两个数字,计算机也只认识0和1。所以,计算机使用二进制,而不是我们熟悉的十进制,写入内存中的数据,都会被转换成0和1的组合。 2 整数的存储2.1 整数的基本概念????????大家知道,整数包括负数,零,和正数。计算机中的整数分为有符号数和无符号数。
2.2 整数的编码方式整数的编码分为原码、反码、和补码。计算里使用的是补码的存储方式。它们的定义如下:
-128的二进制表示今天看到8位2进制表示的范围是-128-127。原来没有想过为什么是这个范围,仔细一想,奇怪呀,-128是怎么表示的。127是0111 1111,而-128为什么是1000 0000呢,这不是-0吗?于是就有了下文要说的一些内容。 STEP2 STEP3 因为计算机是以补码来存储整数的,所以补码就显得很重要。那么如何计算整数的补码呢?下面以具体例子来说明。 100 的补码:01100100 3浮点数存储一般的编程语言都是将浮点类型的数据采用单精度类型( float)和双精度类型(double)来存储,float 数据占用 32bit,double 数据占用 64bit,我们在声明一个变量 float f= 2.25f; 的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是 float 还是 double 在存储方式上都是遵从 IEEE 的规范的, float 遵从的是 IEEE R32.24 ,而 double 遵从的是 R64.53。无论是单精度还是双精度在存储中都分为三个部分:
3.1 二进制十进制间小数怎么转换十转二
因此 120.5 用二进制表示为:1110110.1 用二进制的科学计数法表示 1000.01 可以表示为 1.0001* 2^3,1110110.1可以表示为 1.1101101* 2^6。 至于指数E,情况就比较复杂。 首先,E为一个无符号整数(unsigned int)这意味着,如果E为8位 (float类型) ,它的取值范围为0~255;如果E为11位(double类型),它的取值范围 为0~2047。但是,我们知道,科学计数法中的E是可以出现负数的(因为0.75用科学计数法表示就是1.1*2^-1),所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,==对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。==比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。 接下来我们看下 8.25用float类型存储的数据到底是什么样的?8.25f用二进制的科学计数法表示为:1.0001*2^3,按照上面的存储方式,符号位s = 0,表示为正;指数位 E = 3+127=130 ,尾数部分为1.0001,去掉最前面的整数1,就是M = 0001,所以8.25f用float类型在内存中存储的格式就是: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:26:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |