开篇
本人由于工作需要,需要对C语言进行全方位的研习,所以决定记录下自己在学习过程中对C语言的理解,也算是对自己工作内容的一个总结。本文为作者(Daly.Hu)纯手工打造, 记录过程中难免有疏漏或者错误的地方,烦请各位亲们指正,也希望各位亲们尊重本人劳动成果,转载请注明出处,小弟在此叩谢。
正文
定义变量
我们通常所说的“定义变量“是什么意思?我们抛开现象看本质,这个过程可以分成几个步骤, 第一:分配内存空间,内存空间的大小取决于我们所给定的数据类型,第二:给这个内存空间取一个名字,这个名字就是我们的变量名称,第三:这个变量默认具有一种数据类型的表示方式。
首先看变量内存空间大小:
看一下运行结果:
以上运行结果表明变量c具有一个字节的内存空间
我们现在知道了内存空间有多大了,我们如何知道我们的内存编号(地址)是多少呢?代码如下:
看一下运行结果:
地址格式的表示方式为16进制
一个字节的内存空间有多大?为8位!有效数据范围用二进制表示就是0000_0000 to 1111_1111,十进制为0 to 255
真的是这样码?看一个例子:
猜猜输出是什么? 看实际输出:
怎么变成负数了(-127)?这是因为我们“定义”变量cc的时候除了分配内存之外,还给它指定了数据类型char, 它表示由它产生的变量为有符号字符型。我们对它赋值129,换算成二进制为0b1000_0001,由于变量cc是有符号类型,所以最高位对于变量cc来说就变成了符号位,可以想象为“0b-000_0001”,等等,这样的话不是-1吗?怎么会变成-127?这是因为在计算机里面,负数是用补码的形式来表示的,至于补码是什么东西,网上和各种计算机专业书籍上有详细介绍,在这里不作过多的解释,我们只需要知道补码是原码按位取反之后再加1即可,1000_0001的补码为1111_1111,符号位占据最高位,所以剩下的数字用十进制表示就是127,组合在一起就是-127。char型数据的十进制有效数字范围就变成了-128——+127,不是0——255喔!
变量一出生难道数据类型就定死了吗?看例子:
用(unsigned char)将变量cc临时转换为无符号字符型,也就是强制类型转换,看一下输出结果:
看到变化了吗?强制类型转换在实际工作中的使用频率非常高,因为我们的数据在内存中都是以二进制方式存储,数据类型不过是我们给予它的一个视角罢了,我们想用什么角度看它就用什么角度看它,计算机无权干预。这也是我们常说C语言灵活的原因之一。