c语言变凉存储性,C语言数据的表示和存储(IEEE 754标准)
C语言的数据类型大体上分为整数和浮点数两种类型。因为char和指针类型实际上都是整数类型。
移码:给每一个数值加上一个偏置常数即可。通常是加上2^(n-1)或者是2^(n-1)-1这里的n通常取编码的位数 (IEEE 754)
移码通常用来表示浮点数的阶,这样便于浮点数加减运算时对阶的操作。
机器数是指补码,真值则是这个数原来的十进制形式。
变形补码:补码的符号位只有一位,容易溢出。所以便有了变形补码,它的符号为有两位,不会溢出。
正数的原码=反码=补码
负数的反码是对其原码按位取反,补码=反码+1.
在C语言中整数又可分为无符号整数和带符号整数两类。即unsigned和signed。
无符号整数在机器中直接以二进制补码的形式存放(因为正数的原码=补码,所以也可认为是原码),现代的机器大多是从左到右对应于从高到低。例如8051就是这样的。故C语言的无符号类型数的范围如下:(32位下)
unsigned char (1字节) 0——255
unsigned int (4字节) 0——4294967296
unsigned short(2字节) 0——65535
unsigned long(4字节) 0——4294967296
带符号整数在机器中也是以二进制补码形式存放的, 最高位是符号位,其余是数值位。但是有个例外,2147483648他的补码是这样的110000000000000000000000000000000 (33位数字),我们说最高位是符号位,所以反码应该是101111111111111111111111111111111(33位数字),只有这样才保证没有溢出,所以实际上计算机还是自动往前多读了一位,否则就会解释为0.
char -128——127
int -2147483647 - 1 —— 2147483647
long long -9223372036854775807- 1 ——9223372036854775807。
数字 2147483648 大于最大整数值 2147483647,而且-2147483648 分两步解释,首先2147483648是个无符号正数,由于它大于2147483647,所以类型被取为unsigned long。在VS上给unsigned类型不允许使用一元负运算符。故定义为-2147483647-1。这样使得类型是int类型。
浮点数的表示不同于整数(整数是定点数)。表示起来很麻烦。float,double,long double。
第0位是符号位,0表示正数,1表示负数。阶码是由移码表示的,故为2^7 = 128。故
最大正数应该表示为:0.111111111111111111111111×2^127=(1-2^-24)×2^127
最小正数应该表示为:0.1000000000000000000000000×2^-128=2^-129
最小负数应该表示为:-0.111111111111111111111111×2^127=-(1-2^-24)×2^127
最大负数应该表示为:-0.1000000000000000000000000×2^-128=-2^-129
0还是表示为0
用这种表示方式,使得可表示的数的范围变得非常大。但是不是绝对精确的。而且早期的这个表示方式的规定不是统一的,直到IEEE 754制定,计算机中浮点数的表示才算统一了标准。该标准规定了整数部分为1(小数点前隐含了1),32位的阶码有8位(偏置常量是127),64位的阶码有11位(偏置常量是1023)。因为偏置常量是127,故实际的阶码应该是00000001——10000000.其中没有包含00000000和11111111。所以0在IEEE 754中是这样表示的。+0=00000000000000000000000000000000. -0=10000000000000000000000000000000
所以0在该标准中有两种表示方式。
规定了+∞和-∞。他们在IEEE 754标准中,表示如下:
+∞:01111111100000000000000000000000
-∞:11111111100000000000000000000000
至于为什么说float的精度是小数点后6——7位,这是因为上面的IEEE 754规定了32位下尾数最多有23位,即2^23 = 8388608,刚好是10进制的7位,最多7位,有些7位是不精致的,因为毕竟数值不是9999999,而是8388608.故教科书上写的是6——7位。64位下阶码是11位,符号位是1位,所以尾数占据52位,即2^52 = 4503599627370496.这个数字有16位,当然由于不是9999999999999999,故教科书给的是15——16位。
本文同步分享在 博客“zy010101”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
c语言变凉存储性,C语言数据的表示和存储(IEEE 754标准)相关推荐
- 【编程基础】浮点数在计算机中的存储 —— IEEE 754标准
寻求更好的阅读体验,请移步 :浮点数在计算机中的存储 -[Mculover666的个人博客]. 用于存储小数的数据类型是有单精度浮点型(float)和双精度浮点型(double),那么,浮点数在计算机 ...
- Java入门之7:Java中的float和double类型的浮点数是怎么按照IEEE 754标准存储的?
前言: 这篇博文,我写了好几天--,里面涉及的基础概念比较多,内容比较多,举例也比较多,想搞清楚明白就难免 我自己都会觉得啰嗦,我整理了目录出来,看完需要一点时间,可以自行根据需要.感兴趣的 选择阅读 ...
- mysql存储数组类型的数据_mysql中怎么存储数组
展开全部 SQL没有数组这种类型,数组是一种数据结构的概念,跟关系型mysql数据存储32313133353236313431303231363533e78988e69d833133343362313 ...
- C语言学习(十一)小数在内存中是如何存储的?定点数与浮点数各自的优势在哪?规格化浮点数与非规格化浮点数又表示什么?
C语言学习(十一)小数在内存中是如何存储的?定点数与浮点数各自的优势在哪?规格化浮点数与非规格化浮点数又表示什么? 浮点数与定点数 小数在内存中以浮点数形式存储.浮点数并不是一种数值分类,他和整数.小 ...
- 16 bit float 存储_小数在内存中是如何存储的,揭秘诺贝尔奖级别的设计(长篇神文)...
小数在内存中是以浮点数的形式存储的.浮点数并不是一种数值分类,它和整数.小数.实数等不是一个层面的概念.浮点数是数字(或者说数值)在内存中的一种存储格式,它和定点数是相对的.C语言使用定点数格式来存储 ...
- 计算机系统基础:数据的表示和存储
文章目录 数据的表示和存储 信息的二进制编码 定点数的表示 C语言支持的基本数据类型 编译器处理常量时的默认类型 浮点数的表示及范围 IEEE754 非数值数据的编码表示 多媒体信息的表示 数据宽度和 ...
- 2.2 数据的表示和存储(二)
2.4 浮点数的编码表示 1. 浮点数类型 C语言声明 操作数类型 存储长度(位) float 单精度浮点数 32 double 双精度浮点数 64 long double 扩展精度浮点数 80 / ...
- 单精度浮点数计算机存储的理解(IEEE 754)
浮点数剖析 以下是该标准对浮点数格式的描述. [编辑]本文表示比特的约定 把W个比特(bit)的数据,从内存地址低端到高端,以0到W−1编码.通常将内存地址低端的比特写在最右边,称作最低有效位(lea ...
- 利用万能数据结构表存储多源异构数据
利用万能数据结构表存储多源异构数据 简介:多源异构问题是现有技术无法解决的大难题,原因在于数据共享交换的应用场景与当前的信息系统中的数据的应用场景完全不同,关系数据库已不能有效地处理数据共享交换中的数 ...
最新文章
- 第十三届全国大学生智能汽车竞赛获奖名单
- sublime_text配置php调试环境,SublimeText2配置PHP调试环境(在windows环境下)
- Java面试题整理,一线互联网公司java面试核心知识点
- 一个简单的 js 时间对象创建
- qsub 指定节点_PBS,QSUB常用命令
- AlertDialog禁止返回键
- sicily 1156 ——虽然Wrong error(原因尚未查明),但温习了一下基础知识
- 普通用户竟这样执行xp_cmdshell存储过程!
- leetcode 997 找到小镇的法官
- 【已解决】运行Eclipse出错:Failed to load the JNI shared library
- 1、Spring入门
- china area part 1
- Scala语言的特点
- Centos7 下配置Samba服务器---犯二的经历
- 如何更改电脑桌面壁纸,换上自己想要的壁纸?
- Python学习第一次笔记
- 如何用深度学习框架PaddlePaddle实现智能春联
- 当心!共享单车二维码暗藏信息安全隐患
- 基于视频流传输 — 在线教育白板技术
- 清北学堂noip2019集训D2——数据结构