听一位程序猿讲过,写代码有三个境界:看代码是代码,看代码是内存,看代码还是代码。第一个境界入门,第二个境界熟练,第三个境界已经是大牛了。不过,应当还要有一个境界,超脱这个三个境界之外——

      看代码是英文字母!


1、数据类型

类型不同决定在内存中开辟空间的大小,以及如何看待内存空间的视角。


2、整型存储

整数在计算机中有三种表示方法,原码,反码,补码。对于整形,在内存中存储的为补码。

正数,原反补三码相同,无变化。

负数,原码保持符号位不变,其余位按位取反,得到反码,反码加1,得到补码。

若想从补码获得原码,可减1,再保持符号位不变按位取反,亦可将这两个过程翻转,因此,实现原码和补码的转化并不需要额外的硬件电路。

同样,补码的运算也可以让加法与减法同时处理,使用同一套电路。

发明补码的科学家真是天才!


3、大小端存储

大端模式:指数据的低位存储在内存的高地址中,而高位存储在内存的低地址中;

小端模式:数据的低位存储在内存的低地址中,而高位存储在内存的高地址中;

而计算机中采用何种方式,通常由其cpu架构确定,并不由操作系统确定。虽然我们不可以改变模式,但是我们却可以用一个简单的程序进行判断,得知系统整形数据的存储模式。

#include<stdio.h>
int check()
{
int i = 1;
return (*(char*)&i);//将&i强制类型转换位char*,读取第一个字节中的数据
//将其返回,若为1则为小端模式,为0则为大端模式

这是因为,1用16进制表示为00 00 00 01,1位于数据的低位,而存储数据又是从低位地址到高位地址存储,由此得以判断。


4、浮点型存储

二进制浮点数,按以下方式表示

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

式中,^为次方,(-1)^S为符号位,M为有效数位,2^E为指数位

标准规定,S为1bit,位于数据首位;E为8bit(32位中,64位中为11bit),位于中间;最后为M,23bit(32位中,64位中为52bit)。