迅速理解 #C语言变量#

C语言变量

C语言变量,是指内存空间中的一段内存区域,可以用于存放和读取一定大小的数据。每个变量都在内存中有一个独立的地址,在变量有效期内变量的地址一直保持不变。

变量命名规则

编译器对变量的命名是有一定要求的,如果不符合变量命名规则会编译时就会出错。

a)变量名只能是字母(a-z A-Z),数字(0-9)与下划线(_)的组合,并且之间不能包含空格;

b)变量名首字母必须为字母(a-z A-Z)或者下划线(_),数字不能放在变量名首位;

c)变量名不能使用关键字做变量名,比如:for、while、case、break等关键字等。

将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:

a)添加一些新的变量名,违反以上三种变量命名规则时查看是否编译出错;

b)在运行结果中,查看a1与_f1两个变量地址相差的距离。

另外,除了编译器对变量的命名有要求外,各个软件开发公司往往还有额外的代码规范。网上流传最多的就是匈牙利命名法,该命名法是在每个变量名的前面加上若干表示数据类型的字符。基本原则是:变量名=属性+类型+对象描述。

例如:int m_nAge;

m_代表成员变量,g_代表全局变量。n代表该变量是一个整型变量,Age代表这个变量是用来记录年龄的。更详细的匈牙利命名法或者公司代码规范,可以通过网上搜索,这里只做简单介绍。

变量分类:

根据当个变量的空间长短可分为:

a)字符型变量(1个字节):char类型、unsigned char类型;

b)短型变量(2个字节):short类型、unsigned short类型;

c)长型变量(4个字节):int、unsigned int(或long、unsigned long)或float类型以及指针变量等;

d)超长型变量( 8个字节):double类型、__int64或long long等。(有些编译器不支持__int64类型,有些编译器不支持long long)

根据类型可以分为:

a)整数型变量:包括char、 unsigned char、short、 unsigned short、int、 unsigned int(或long、unsigned long )以及 __int64或long long等。

b)浮点数型变量:float类型(单精度)、double类型(双精度);

c)其他变量类型:数组变量、指针变量以及结构体对象等。

变量的存储原理

4个位的二进制数,刚好表达的是十六进制数字的个位数。如果再加4个位就是8位,刚好表达的就是十六进制的两位数。计算机以8个位代表一个字节,表达的数字是0x00到0xFF之间的数字,也就是从0到255之间总共256个数字,就像十进制中的两位数是0到99总共100个那样。

单字节(8位)变量

单字节变量也叫8位变量,包括unsigned char和char两种类型,都属于整型变量。

unsigned char:无符号单字节变量,存储范围是0-255(0xFF)。

char:有符号单字节变量,存储范围是-128到0到127之间的数。

单字节变量的存储原理

对于unsigned char类型变量,毫无疑问只要在8个位不同的位置上存储1或0,就能得到0-255之间256种组合后的数字。

为了让char类型存储的256种数字中,一半是正数一半是负数,计算机将char类型变量中的最高位作为符号位。最高位为0的是正数,最高位为1是负数。最高位是0时最大的数字就是0x7F,转成二进制就是0111 1111。对这个二进制或者十六进制数加1,就会出现最高位为1的数字,即:0x80(1000 0000)。

很明显,十六进制0x80作为中间点,左右各有一半的十六进制数字,就如十进制中50是0到100之间的中间值。0x80对应的十进制是128, 0到127之间都是正数区域,从128开始对于char类型变量则开始变成负数了。

那么如何将负数区域的十六进制或二进制数字,转换为一个对应十进制的负数呢?先编写点代码来测试一下。

测试8位变量的存储特点

#include <stdio.h>

int main()

{

char c = 129; //有符号(有负号): 0-127  -1 到 -128

unsigned char u = 255; //无符号:0-255

printf("u=%d\t c=%d\n",u,c);

u = 0x8887F; //溢出 之后只留1个字节

c = 0x88877F; //溢出

printf("u=%d\t c=%d\n",u,c);

u = 256; //0x100 //溢出

c = 256;

printf("u=%d\t c=%d\n"

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值