整型数据在内存中存储方式的讲解
(以下讨论,针对32位的计算机系统。。)
问:int型数据占几个字节?答:4字节。地球上这个群体的人都知道。
再问:这4个字节,即32个二进制位,又是何存储?这就进入计算机的“底层”了。这个事情,学习程序设计的童鞋,可以懂。
存储的方式,和我们拍脑袋想得不太一样,概括一下,就是低位在前,高位在后。
本文直观一些,看懂以下程序中数据的存储,也便知道这个安排。
(源程序,及在watch窗口中用多种方式看x.c的方法,见文后附件。)
在程序中,由于联合体存储的特点,变量x占4个字节。我们可以从3个角度观察这4个字节:(1) 整体看,是一个int型数据;(2) 分成2部分看,是两个短整型数据;(3) 分成4部分看,是4个单字节的数据。
但无论怎么看,就是这4个字节。无论用哪种形式操作数据,使用的也就是这4个字节。联合体为我们提供了从不同的角度使用这4个字节的方式。
x.c[0]到x.c[3]的值分别为65\66\67\68,这好理解。
x.si[0]占的2字节,与x.c[0]和x.c[1]相同。验证一下:16961=66×256+65(66是'B'的ACSII值,65是'A'的ASCII值,是字符的存储形式)。注意,这里体现存储数据时低位在前,高位在后,低位是65,高位是66。正如十进制数98中,高位是9,低位是8,所以98=9×10+8一样。因为是高位,所以乘以位权10,表示9这个符号代表的其实是90。66×256,是因为存储66(‘B')的那一个字节的位置,比存储65(‘A')的那一个字节的位置高8位,所以乘以2的8次方,即256。
概括讲,存储2字节的16961时,其低8位,是65,在前(x.c[0]),而其高8位,是66,在后(x.c[1])。低位在前,高位在后。
请自行验证:17475=68×256+67,体现低位在前,高位在后。(x.si[0]占的2字节,与x.c[2]和x.c[3]相同)
再请验证:1145258561=17475×256×256+16961,也体现低位在前,高位在后。(x.i占的4字节,与x.si[0]和x.si[1]相同)
再请验证:1145258561=68×256×256×256+67×256×256+66×256+65。同样的道理。
换种写法,是1145258561=(((68×256+67)×256+66)×256+65。
再看截图,品味低位在前,高位在后。
这样安排的道理,在以后的关于“计算机的原理”的有关专业课中会接触到。
附1:本文源程序
#include <iostream> using namespace std; union un { int i; short int si[2]; char c[4]; }; int main() { union un x; x.c[0]='A'; x.c[1]='B'; x.c[2]='C'; x.c[3]='D'; cout<< x.c[0]<<","<<x.c[1]<<","<< x.c[2]<<","<< x.c[3]<<endl; cout<<x.si[0]<<","<< x.si[1]<<endl; cout<<x.i<<endl; return 0; }
附2:在watch窗口中用多种方式看x.c的方法
在watch窗口中,除自动显示的局部变量的值,还可以自行输入表达式跟踪。
方法是,直接在表格中写下表达式,如图中,x.c,其他任意。
输入表达式后,在上面点右键,会有几个选项,点properties…(属性),然后就是如下的窗口:
任性地多角度观察吧!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
上一篇:C++实践IP地址类项目参考
栏 目:C语言
下一篇:C语言实现学生选课系统
本文标题:整型数据在内存中存储方式的讲解
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/436.html
您可能感兴趣的文章
- 04-02func函数+在C语言 func函数在c语言中
- 04-02C语言中怎么打出三角函数 c语言中怎么打出三角函数的值
- 01-10数据结构课程设计- 解析最少换车次数的问题详解
- 01-10数据结构课程设计-用栈实现表达式求值的方法详解
- 01-10APUE笔记之:进程环境详解
- 01-10c++中inline的用法分析
- 01-10深入理解堆排序及其分析
- 01-10深入C/C++浮点数在内存中的存储方式详解
- 01-10深入解析Linux下\r\n的问题
- 01-10基于getline()函数的深入理解
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 04-02jquery与jsp,用jquery
- 01-10SublimeText编译C开发环境设置
- 01-11ajax实现页面的局部加载
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10C#中split用法实例总结
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05织梦dedecms什么时候用栏目交叉功能?