变量和数据类型

所有定义的变量都存在内存中,定义变量需要内存空间,不同类型的变量需要的内存空间是不同的
数据类型作用:告诉编译器,我这个数据在内存中需要多大的空间,编译器预算对象(变量)分配的内存空间大小。

1.常量与变量1.1 常量

常量:程序运行中不能改变的量

  • 整型常量:1 200
  • 字符常量: ‘c’
  • 字符串常量:”hello”
  • 实型常量(浮点型常量):3.14,0.125
整型常量100,200,-100,0
实型常量3.14 , 0.125,-3.123
字符型常量‘a’,‘b’,‘1’,‘\n’
字符串常量“a”,“ab”,“12356”

1.2 变量

1. 变量的空间大小
变量:程序运行中可以被改变的量,存在于内存中

  • 变量需要定义,变量的定义:在内存中开辟空间,告诉编译器我有这个变量(声明),变量定义的本质:在内存中开辟空间,给这个空间取名**
  • 数据类型 变量名(数据类型告诉编译器占多大的空间)
  • int类型在内存中占4字节
  • short类型在内存中占2字节
  • long类型,在windows中都是4字节,linux中,32位系统4字节,64位系统8字节
  • char类型在内存中占1个字节
  • float类型在内存中占4字节,用于存储小数(float精度能达到7位小数)
  • double类型在内存中占8字节(double精度能达到15位小数)
    char short int long都可以用来存储整数
int a; // 在内存中定义了一个变量a,占int类型大小4个字节char b; // 在内存中定义了一个变量b,占一个字节

2. 变量的命名规则

  • 定义变量时,变量名必须以字符和下划线开头,不能以数字开头
  • 变量取名不能为关键字
  • 变量取名的时候要顾名思义
  • 变量定义时要区分大小写
    变量定义的本质:在内存中开辟空间,给这个空间取名
  • extern 数据类型 变量名–告诉编译器有这个变量,但是这里不开辟空间
        int num;num = 100;//int num = 200; 定义变量并且初始化 printf("num = %d\n", num);return 0;//成功完成        extern short SUM;  // extern 告诉编译器我有这个变量,没有定义,不能进行赋值                           // 声明有SUM,并没有开辟空间,只有在定义的时候开辟空间                           // 定义可以在其他.c文件中定义变量或者main函数外的位置等
#define MAX 10  // MAX相当于一个常量MAX = 100; // 报错,MAX是一个常量,常量不可以被更改

3. 变量的特点

  • 变量在编译时为其分配相应的内存空间
  • 可以通过其名字和地址访问相应的内存

4. 声明和定义的区别

  • 声明变量不需要建立存储空间,如:extern int a;
  • 定义变量需要建立存储空间,如:int b;
#include int main(){//extern 关键字只做声明,不能做任何定义,后面还会学习,这里先了解//声明一个变量a,a在这里没有建立存储空间extern int a;a = 10;//err, 没有空间,就不可以赋值int b = 10;//定义一个变量b,b的类型为int,b赋值为10return 0;}

从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所有的声明都是定义:

  • int b 它既是声明,同时又是定义
  • 对于 extern b来讲它只是声明不是定义

一般的情况下,把建立存储空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。

#include #define MAX 10 //声明了一个常量,名字叫MAX,值是10,常量的值一旦初始化不可改int main(){int a;//定义了一个变量,其类型为int,名字叫aconst int b = 10; //定义一个const常量,名为叫b,值为10//b = 11; //err,常量的值不能改变//MAX = 100;//err,常量的值不能改变a = MAX;//将abc的值设置为MAX的值a = 123;printf("%d\n", a); //打印变量a的值return 0;}

1.3 关键字

1.4 const修饰的变量

const关键字修饰的变量不能被更改

#include int main(){int a;//定义了一个变量,其类型为int,名字叫aconst int b = 10; //定义一个const常量,名为叫b,值为10//b = 11; //err,常量的值不能改变return 0;}

const修饰的变量b,告诉编译器,不能通过b(变量名)修改这块空间的内容,但是可以通过地址进行修改

2.进制

进制也就是进位制,是人们规定的一种进位方法。 对于任何一种进制—X进制,就表示某一位置上的数运算时是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。

2.1 二进制

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。

当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。

  • C语言中是没有办法书写二进制的
    1 术语
术语含义
bit(比特)一个二进制代表一位,一个位只能表示0或1两种状态。数据传输是习惯以“位”(bit)为单位。
Byte(字节)一个字节为8个二进制,称为8位,计算机中存储的最小单位是字节。数据存储是习惯以“字节”(Byte)为单位。
WORD(双字节)2个字节,16位
DWORD两个WORD,4个字节,32位
1b1bit,1位
1B1Byte,1字节,8位
1k,1K1024
1M(1兆)1024k, 1024*1024
1G1024M
1T1024G
1Kb(千位)1024bit,1024位
1KB(千字节)1024Byte,1024字节
1Mb(兆位)1024Kb = 1024 * 1024bit
1MB(兆字节)1024KB = 1024 * 1024Byte

2. 十进制转换二进制
十进制转化二进制的方法:用十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。

十进制的小数转换成二进制:小数部分和2相乘,取整数,不足1取0,每次相乘都是小数部分,顺序看取整后的数就是转化后的结果。

2.2 八进制

八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。一些编程语言中常常以数字0开始表明该数字是八进制。

八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。

十进制转化八进制的方法:
用十进制数除以8,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。

0123   // 八进制,八进制数之前加0

2.3 十六进制

十六进制(英文名称:Hexadecimal),同我们日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9,A-F对应10-15。

十六进制的数和二进制数可以按位对应(十六进制一位对应二进制四位),因此常应用在计算机语言中。


十进制转化十六进制的方法:
用十进制数除以16,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。

2.4 C语言各个进制数的表示

十进制以正常数字1-9开头,如123
八进制以数字0开头,如0123
十六进制以0x开头,如0x123
二进制C语言不能直接书写二进制数
#include int main(){int a = 123;//十进制方式赋值int b = 0123;//八进制方式赋值, 以数字0开头int c = 0xABC;//十六进制方式赋值//如果在printf中输出一个十进制数那么用%d,八进制用%o,十六进制是%xprintf("十进制:%d\n",a );printf("八进制:%o\n", b);//%o,为字母o,不是数字printf("十六进制:%x\n", c);return 0;}