重学c/c++之数据存储详解(整数、浮点数)

 更新时间:2022年11月10日 08:49:10   作者:Not Talk  
C语言给定了一些基本的数据类型,下面这篇文章主要给大家介绍了关于重学c/c++之数据存储(整数、浮点数)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

一:整形

正常情况下

正数在内存中的存储为补码。

char a=30;

00011110(计算机中的存储)

负数在内存中的存储为补码。

char a=-30;

10011110(原码)
11100001(反码)
11111011(计算机中的存储)

注意的是当数据存在溢出的时候,会变成负数,如下图。

int main() {
    char a=130;
    printf("%d",a);// -126
}

分析

10000010(计算机中的存储)

特殊情况下

有符号

unsigned char c=-1;

解释

10000001(机器码)
111111110(反码)
111111111(补码,由于是无符号,符号变0,即01111111)

char c=-2;//4294967294

10000000 00000000 00000000 00000010(机器码)
11111111 11111111 11111111 11111101(反码)
11111111 11111111 11111111 11111110 (补码,由于输出的是无符号位,所以直接输出,不需要转化)

数据溢出()

正数(负数)

 char a=129;
 printf("%d",a);//-127

解释

1000 0001(首先,会把129的机器码作为补码存储在内存中)
1111 1111(减一求反得到原码,然后输出)
如果只有最高位为负数,则直接加负号

char a=-130;

解释

1000 0010(首先,会把-130的机器码作为补码存储在内存中)
1000 0001(减一)
0111 1110 2+4+8+16+32+64=126 (得到原码)

补充

大端存储:数据的低位保存在内存的高位中,而数据的高位保存在内存大地位中。
小端存储:数据的低位保存在内存的高位中,而数据的高位保存在内存大地位中。

//设计一个小程序来判断当前机器的字节序
Bool checkSys(){
int a=1;
return (*(char *)&i);
}

二:浮点型

根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:

(-1) ^ S * M * 2 ^ E

其中:

  • (-1) ^ S 表示符号位,当S=0,V为正数;当S=1,V为负数。
  • M 表示有效数字,大于等于1,小于2。
  • 2 ^ E 表示指数。

注:

1、这里的有效数字范围是[1,2),可类比十进制中有效数字的范围是[1,10)。

2、指数部分以2为底数,类比十进制中指数部分以10为底数。

例如十进制中的5.0,写成二进制浮点数是101.0,用该形式表示就是(-1) ^ 0 * 1.01 * 2 ^ 2
(其中S = 0, M = 1.01, E = 2)

又如十进制中的-5.5,写成二进制浮点数是101.1(此处小数点后的第一位权重是2 ^(-1),也就是0.5,所以此处是1),用该形式表示就是(-1) ^ 1 * 1.011 * 2 ^ 2

(其中S = 1, M = 1.011, E = 2)

E全为0时

由于E加上后127为全0,也就是说E的真实值为-127,即该浮点数指数部分是2 ^ (-127),显然这是一个极小的数,此时有效数字M不再加上第一位的1,而是还原为以0为整数的小数。这样做是为了表示±0,以及接近于0的很小的数字。

E全为1时

由于E加上后127为全1,也就是说E的真实值为128,即该浮点数指数部分是2 ^ (128),显然这是一个极大的数,此时表示正负无穷大(正负号由S决定)

中以32位浮点数为例,64位浮点数同理

总结

到此这篇关于重学c/c++之数据存储的文章就介绍到这了,更多相关c/c++数据存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用ace的ACE_Task等类实现线程池的方法详解

    利用ace的ACE_Task等类实现线程池的方法详解

    本篇文章是对利用ace的ACE_Task等类实现线程池的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++ 关于MFC多线程编程的注意事项

    C++ 关于MFC多线程编程的注意事项

    这篇文章主要介绍了C++ 关于MFC多线程编程的注意事项的相关资料,需要的朋友可以参考下
    2015-06-06
  • EasyC++模板重载

    EasyC++模板重载

    这篇文章主要介绍了C++模板重载,重载的模板的函数特征,也就是入参的数量和类型必须有所不同,下面我们讲举例说明此内容,具有一定的参考价值,需要的小伙伴可以参考一下
    2021-12-12
  • C++实现LeetCode(173.二叉搜索树迭代器)

    C++实现LeetCode(173.二叉搜索树迭代器)

    这篇文章主要介绍了C++实现LeetCode(173.二叉搜索树迭代器),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C++编写高性能服务器实例教程

    C++编写高性能服务器实例教程

    这篇文章主要介绍了如何用C++编写高性能服务器,文中通过示例代码介绍的非常详细,对大家学习C++有一定的参考价值,需要的朋友们可以了解下
    2020-06-06
  • C++中需要注意的细节你知道吗

    C++中需要注意的细节你知道吗

    这篇文章主要介绍了C++ 需要注意的几点细节,帮助大家更好的理解和学习C++,感兴趣的朋友可以了解下,希望能够给你带来帮助
    2021-09-09
  • Visual Studio 2022下载安装与使用超详细教程

    Visual Studio 2022下载安装与使用超详细教程

    这篇文章主要介绍了Visual Studio 2022最新版安装与使用教程,本文以社区版为例通过图文并茂的形式给大家介绍Visual Studio 2022安装使用,需要的朋友可以参考下
    2022-04-04
  • C++实现二分法求方程近似解

    C++实现二分法求方程近似解

    这篇文章主要为大家详细介绍了C++实现二分法求方程近似解,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • C++中输入输出流及文件流操作总结

    C++中输入输出流及文件流操作总结

    这篇文章主要为大家总结了C++中输入输出流及文件流操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • C++实现推箱子小游戏源码

    C++实现推箱子小游戏源码

    这篇文章主要为大家详细介绍了C++实现推箱子小游戏源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07

最新评论