内存代表的实际含义

时间:2021-06-19 06:41:03

计算机的内存最小组成单元是bit,不过有意义的存储单元是byte,一般由8个bit构成。内存可以看做是大量二进制byte构成的。通常来讲这些byte是没有特殊意义的。那么计算机是如何将有实际意义的数据存储在这些没有意义的byte中的呢。


方法是这样的:

数据的存储一般是这样的格式: TYPE varName=data;而计算机已经指定了各种类型data与相应变量类型之间的转换规则(不同类型数据存入不同类型变量,根据不同转换法则转换为二进制数据)。例如

int a=23;将整型数据5保存到有符号整型变量a中,规则是a的32位二进制数中,第一位为符号位0为正,1为负,数值23转换为二进制数插入32位的低位部分。

unsigned int a=23;由于定义的a类型变量,转换规则也变量,最终存储的二进制数据也发生了变化。


同样的内存数据可以有不同的含义,主要是由于此段内存的类型决定的。

都是23,但是存储的二进制数却不同,那使用时如何知道他们的实际意义都是一样的呢?原因也很简单,当变量被操作时,系统会根据这个变量的类型运用不同的对应规则还原此二进制序列的实际一样。


数据的类型决定了相关的转换规则例子:

float a=23.4;

int b=(int)a;这里的a为float型,指定了转换规则为(int),所有计算机根据float转换为int规则对数据进行转换,然后存入到b中。注意这里的转换a,b对应的内存二进制数据发生了很大的改变。

再例如:

int a=23;

char b=(char)a;这里系统根据相关的转换规则讲int型a转换为char型存入b中,而a、b中对应的二进制数据是没有变化的!



总之,数据的输入,操作,输出都是有相关的转换规则对应的,系统会根据相关的规则进行默认转换。一段二进制数据的实际意义是根据其被定义的类型确定的!


一些转换规则有:

int型数据赋值给char型变量,规则等同于将int型数据赋值给有int型变量,只是只有8位bit。例如 char a=114;是可以的,赋值规则如刚才所述。

char转换为unsigned char 数据不变,仅仅是改变了二进制数据的类型。

int转换为unsigned int 同上。他们不改变内存的存储形式,但是由于内存对应的类型不同,也就导致了实际意义的不同,从而导致操作的方式的不同,显示的方式的不同。