计算机对存储信息的解释
来源:互联网 发布:voa软件下载 编辑:程序博客网 时间:2024/05/17 21:47
前言
在计算机看来存储器中信息都是二进制的bit流,计算机在解释一个数据类型的值时主要有四个因素:位排列规则(大端或者小端)、起始位置、数据类型的字节数、数据类型的解释方式。
位排列规则
如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示。
地址偏移
大端模式
小端模式
0x00
12(OP0)
78(OP3)
0x01
34(OP1)
56(OP2)
0x02
56(OP2)
34(OP1)
0x03
78(OP3)
12(OP0)
小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址。
大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。
起始位置
数据存储的起始地址,计算机 要按照那个字节开始解释。
对于特定的系统来说,前两种因素都是特定的,而对于后两种因素的改变,则可以改变一个数据类型的值的最终计算结果,这就是强制类型转换。
对于大部分高级程序设计语言来讲,都提供了强制类型转换。
比如C语言,我们可以将一个无符号int类型的值强制转换为其它类型,在转换之后,对于上面四个因素之中,改变的是最后两个。为此我们写一个小程序来看下这个有意思的事情。
#include <stdio.h>int main(){ unsigned int x = 0xFFFFFF61; int *p = &x; char *cp = (char *)p; printf("%c\n",*cp);}
这是一个简单的强制类型转换示例,可以看到我们将一个无符号int类型的值,先赋给了一个int类型的指针,又强制转换成了char类型的指针,最终我们输出这个char类型指针所代表的字符,结果的输出是一个a。
输出a的原因就是由上面的四个因素决定的,我们看这个具体程序上的四个因素。
1、cp指针的值与x变量的起始内存地址相等。(起始位置)
2、LZ的linux系统是小端表示法,也就是说假设x变量的起始内存地址为0x1,那么0x1-0x4的值分别为0x61、0xFF、0xFF、0xFF。(位排列规则)
3、char只占一个字节,因此会只读取0x61这个值。(数据类型的字节数,或者说大小)
4、0x61为十进制的97,对应ascii表的话,代表的是字符a,因此最终输出了a。(数据类型的解释方式)
可以看出,强制类型转换有时候会让结果变的让人难以预料,因此这种技巧一般不太推荐使用,但是这种手段也确实是程序设计语言所必需的。
- 计算机对存储信息的解释
- 第一章 计算机存储信息的原理
- 计算机中栈区,堆区,静态存储区,文字常量存储区,代码区的详细解释
- 计算机中栈区,堆区,静态存储区,文字常量存储区,代码区的详细解释
- 计算机中栈区,堆区,静态存储区,文字常量存储区,代码区的详细解释
- 计算机中栈区,堆区,静态存储区,文字常量存储区,代码区的详细解释
- 通俗易懂的解释计算机单位中位、字节、字符、进制、存储类型。
- 计算机集群技术的解释
- 计算机的存储单位
- 计算机的存储单位
- 计算机的存储模式
- 对DestoryWindow的解释.
- 对MarshalByRefObject的解释
- 对MarshalByRefObject的解释
- 对计算机的认识
- 计算机内存对数字的存储方式——原码、反码、补码
- MySQL 的存储引擎解释
- dba_source存储的内容解释
- wave文件(*.wav)格式、PCM数据格式
- 日期转换
- object-c常用函数和常数
- Grails OneToMany Set 排序
- java防SQL注入html编码入侵特殊字符转义和方法入参检测工具(Spring)
- 计算机对存储信息的解释
- nginx - 缓存过期影响因素优先级分析(1)
- oracle 函数索引
- win8.1下使用arcgis 10.2问题汇总
- java把图片写入mysql数据库的代码
- 同域名下的多项目谨防sessionid互相影响,造成严重后果
- make与makefile IO read write
- CentOS 6.3更新源 配置源 很重要
- Libvirt学习总结