C语言基础问题1 数据在内存上的表现形式
来源:互联网 发布:淘宝互刷平台 编辑:程序博客网 时间:2024/06/18 15:44
在我们编写程序的时候输入一下简单程序
运行后,会输出a的值,也就是1。但是在内存上,a的值又是怎样表示的呢?一下将分为三种情况进行分析说明。
1、正整数
程序如下:
通过gdb指令查看调试信息之后的得到下面的信息:
可见a的地址是0xbffff1b8,内容是0x01 0x00 0x00 0x00,根据高高低低的原则可看出a中数据就是1,同理可见b中的数据为0x12345678
也就是说,输入整数之后数据按照高高低低的排列规则进行排列放入相关参数的内存中。
2、负整数
前面说到了输入1的时候内存中会存入1,那么输入-1的时候会是什么情况呢 ?
通过gdb指令查看调试信息之后的得到下面的信息:
可以看出-1输入之后在内存中表现为0xff,而-2表现为0xfe
下面我们来计算-1 和-2的反码和补码:
-1:
原码 1000 0001
反码 1111 1110
补码 11111111 0xff
-2
原码 1000 0010
反码 11111101
补码11111110 0xfe
很明显可以看出-1,-2 的补码与内存中-1,-2的表现形式是一样的。
也就是说,当输入为负整数的时候,在内存中将会以负数补码形式存在。
3、正负小数
这里我们以输入2.5和-2.5为例
通过gdb指令查看调试信息之后的得到下面的信息:
通过百度可以知道:小数输入时内存中的表现形式从高到低依次为符号位->指数位->转换后小数点后的数字
并且单精度和双精度所占的空间是不一样的:这里是单精度,符号位占1位,指数位占8位,转换后小数点后的数字占23 位
但是双精度则是:符号位占1位,指数位占11位,转换后小数点后的数字占52位
接下来开始转化小数
2.5表示为二进制位10.1(0.5的转换是根据乘2取整得到的)
算上符号位即是010.1
再将其转化为01.01*10^1
指数位为127+指数的二进制即是1000
根据前面说到的表现形式可得: 0 1000 0000 0100 0000 0000 0000 0000 000
符号位 指数位 小数
写成标准二进制就是 0100 0000 0010 0000 0000 0000 0000 0000
转换成十六进制便是 0x40 0x20 0x00 0x00
这与截图是一致的
而-2.5仅需将符号位改为1即可,在这里将不再累述。
- C语言基础问题1 数据在内存上的表现形式
- JAVA的数据在内存中的表现形式
- 基础数据在内存中的存储-C语言
- C语言数据的表现形式
- C语言的各种数据在内存中如何存储?
- C语言数据在内存中的存储
- 学习笔记(C++中基础数据类型在内存的表现形式)
- c++:变量在内存上的分布
- 关于负数在内存表现形式
- 子父类在内存中的表现形式
- C语言之数据在内存中的分配区域
- C语言变量在内存中存储问题
- c语言中实数在内存中存储问题
- C语言学习二:数据的表现形式及运算
- C语言 变量在内存的地址分布
- 【C语言】[变量]:变量在内存的存储位置
- c c++中数据在内存的存储
- c c++中数据在内存的存储
- 20150713,关于C。
- openrefactory/c之添加整数类型(七)
- android https通信跟服务器配置说明
- 在WIN32 DLL中使用MFC
- do while(0)的另一个用途:消除goto语句
- C语言基础问题1 数据在内存上的表现形式
- maven使用过程中遇见的bug_me
- 黑马程序员 其他对象 I/O
- php设计模式之装饰器模式
- Linux启动新进程的几种方法及比较
- hadoop Unhealthy Nodes
- 两个类相互调用的问题
- linux配置NTP Server
- lucene入门demo