一、基本数据类型与变量
(一)c语言中的基本数据类型
c语言中的常用的数据类型有:
整数:int
浮点数(小数):float
字符:char
“整数”又被称为“整型”,“小数”又被称为“实型”
我们对于整数和小数都比较熟悉,但字符又是什么呢?不要着急,我们会在下节进行详细讲解,在本节中我们先将它当作普通的整数;
(二)变量
-
变量类似一个装东西的盒子,你可以先把东西放里面,等需要使用时再把它取出来
-
一个变量“盒子”理论上能放一个任何东西(只要它能装得下),但是我们要贴一个标签告诉别人这个盒子的大小和它装东西的类型,防止别人将一个过大或其他类型的东西放进里面
如果你有一个盒子是用来放食物的,但是你没有贴标签,其他人就不知道这个盒子到底可以装什么,于是有人在不知情的情况下放了一些垃圾在里面,那么,这个盒子你还会留着吗?
即使你留着它也不会再用它放食物了吧。 -
变量“盒子”有些特殊,它只能放入一个东西。如果一个“盒子”里已经有一个东西,但是你又放入了一个东西,原来的东西就会被“挤出去”
现在,我们要向盒子中放入一支铅笔。
方法一:
-
首先,我们要拿一个盒子并贴上标签“铅笔盒子”,并给他取名为“盒子1”;
铅笔盒子 盒子1;
这个步骤较做声明变量,“铅笔盒子”是变量类型,“盒子1”是变量名。
-
然后,将一支铅笔放在里面;
盒子1 = 黑色铅笔;
这个步骤叫变量赋值,“=”是赋值运算符,它的作用是将等号右边的值赋给左边的变量;
方法二:
直接拿一个放铅笔的盒子并把一支铅笔放进去;
铅笔盒子 盒子1 = 黑色铅笔;
这时候,有人想要用你放在“盒子1”中的铅笔写字;
使用(盒子1);
当然,他不可能拿盒子来写字,他用的是盒子中的铅笔,不过计算机语言就是这么神奇。
现在你想向“盒子1”中放入一支蓝色的铅笔
盒子1 = 蓝色铅笔;
注意,当你放入蓝色铅笔的时候,原来盒子里的那支黑色铅笔就会消失,如果现在有人想使用“盒子1”里的铅笔,他拿到的就是蓝色的铅笔。
(三)C语言中的变量
Ⅰ.C语言中变量的声明和赋值:
-
声明并赋值
变量类型 变量名 = 值;
-
先声明,再赋值
变量类型 变量名; 变量名 = 值;
Ⅱ. 变量名的命名规则
C语言中的变量名是不能随便起的,它要也要遵循一定的规则:
-
变量名中只能出现英文符号、数字、下划线(_)和美元符号($);
-
变量名不能以数字开头;
-
大小写敏感,如:变量a和A是两个不同的变量;
-
变量名不能与关键字相同;
C语言规定了32个关键字(又称为保留字),变量名不能与这些关键字相同:
auto、double、int、struct;
break、else、long、switch;
case、enum、register、typedef;
char、extern、return、union;
const、float、short、unsigned;
continue、for、signed、void;
default、goto、sizeof、volatile;
do、if、while、static;
Ⅲ. C语言中使用变量的例子
- 声明变量a和b,并令a等于1,b等于2;
#include<stdio.h>
void main(){
//声明并赋值
int a = 1;
int b = 2;
}
或者
#include<stdio.h>
void main(){
//先声明,再赋值
int a, b;
a = 1;
b = 2;
}
或者
#include<stdio.h>
void main(){
int a = 1, b = 2;
//这样简写也是可以的
}
- 变量名不能重复
#include<stdio.h>
void main(){
int a = 1;
int a = 2; //这句代码是错的,因为已经存在变量a了
}
- 变量的使用和修改
#include<stdio.h>
void main(){
int a = 1; // a的值是1
a = 2; //a 的值是2
int b = a; // a的值是2,b的值是2
//如果要使用变量a和b,直接使用它们的名字就可以了
int c = a + b; //c的值是4
}
二、变量的存储方式
以下内容可能较难理解,且需要掌握进制转换和文件存储单位的知识,如果你还没有掌握或需要复习一下,请点击下面的链接进行学习
进制转换 点这里
存储单位 点这里
(一)C语言中的基本类型
Ⅰ. 有符号类型(有正负的类型)
整数:int, long int, short int, long long int
浮点数(小数):float, double
字符:char
类型 | 可简写为 |
---|---|
short int | short |
long int | long |
long long int | long long |
Ⅱ. 无符号整型(正整数)
类型 | 可以简写为 |
---|---|
unsigned int | unsigned |
unsigned short int | unsigned short |
unsigned long int | unsigned long |
unsigned long long int | unsigned long long |
注意:不存在无符号小数
(二)变量在计算机中的存储方式
我们知道,计算机内的一切数据都是以二进制的形式存储的,变量当然也不例外
下面,我们以char类型为例讲解整数类型在计算机的存储方式
首先,我要告诉你,char是8位的,它的取值范围是-128~127
这里会有一个疑问,既然char是8位的,那么它的最大值应该是
1111 1111 (二进制)
即十进制的255
但不要忘了,char的取值还包括负数。
1.有符号类型
对于一个有符号的类型,它的二进制的最高位用来表示它的正负(1表示负数,0表示正数)
剩下的位数才表示它的大小
例如char类型的127
0111 1111
-
正数的表示方法
对于正数,它在计算机中的存储方式就是它的二进制
-
负数的表示方法
负数在计算机中是利用补码表示的
取补码的规则:
- 求它绝对值的二进制
- 令符号位即最高位得1
- 符号位不变,其他位取反(取反就是0变1,1变0)
- 最后令结果加1
例如求-1的补码
求它绝对值1的二进制
0000 0001
将符号位变为1
1000 0001对其余位进行取反
1111 1110最后加1:
1111 1111
所以-1在计算机中存储的补码是:
1111 1111
2.无符号类型
无符号类型就是没有符号位,直接表示数
所以,无符号类型的最大值要比相应有符号类型的大
例如 unsigned char的最大值就是255
浮点数的表示方式更加复杂,这里先不做解释,感兴趣的同学可以自行搜集资料了解一下
(三)C语言基本类型占用空间的大小
在不同的系统、开发环境(编译器)中各种基本类型占用的空间是不同的
我们可以利用下面的代码查看各种类型占用的空间:
#include<stdio.h>
void main()
{
// C语言中基本类型占用空间的大小
printf("整数类型:\n");
printf("int:%d字节\n", sizeof(int));
printf("short int:%d字节\n", sizeof(short int));
printf("long int:%d字节\n", sizeof(long int));
printf("long long int:%d字节\n", sizeof(long long int));
printf("\n浮点(整数)类型:\n");
printf("float:%d字节\n", sizeof(float));
printf("double:%d字节\n", sizeof(double));
printf("\n字符类型:\n");
printf("char:%d字节\n", sizeof(char));
printf("\n无符号类型\n");
printf("unsigned int:%d字节\n", sizeof(unsigned int));
printf("unsigned short int:%d字节\n", sizeof(unsigned short int));
printf("unsigned long int:%d字节\n", sizeof(unsigned long int));
printf("unsigned long long int:%d字节\n", sizeof(unsigned long long int));
printf("unsigned char:%d字节\n", sizeof(unsigned char));
}
以上代码在64位win10系统上的Dev-C++中运行的结果为:
整数类型:
int:4字节
short int:2字节
long int:4字节
long long int:8字节
浮点(小数)类型:
float:4字节
double:8字节
字符类型:
char:1字节
无符号类型
unsigned int:4字节
unsigned short int:2字节
unsigned long int:4字节
unsigned long long int:8字节
unsigned char:1字节
表 :一般情况下C语言基本类型占用的空间
类型 | 取值范围 | 科学计数法表示 | 占用空间 |
---|---|---|---|
char | -128 ~ +127 | -2^7 ~ 2^7-1 | 1Byte |
unsigned char | 0 ~ 255 | 0 ~ 2^8-1 | 1Byte |
short | -32767 ~ + 32768 | -2^15 ~ 2^15-1 | 2 Bytes |
unsigned short | 0 ~ 65536 | 0 ~ 2^16-1 | 2 Bytes |
int/long | -2147483648 ~ +2147483647 | -2^31 ~ 2^31-1 | 4 Bytes |
unsigned int/long | 0 ~ 4294967295 | 0 ~ 2^32-1 | 4 Bytes |
long long | -9223372036854775808 ~ +9223372036854775807 | -2^63 ~ 2^63-1 | 8 Bytes |
unsigned long long | 0 ~ 18446744073709551615 | 0 ~ 2^64-1 | 8 Bytes |
float | \ | +/- 3.40282e+038 | 4 Bytes |
double | \ | +/- 1.79769e+308 | 8 Bytes |
三、基本类型的注意事项
Ⅰ. 表示其他进制
只有整数可以表示其他进制
-
十六进制
以0x或0X开头(0是阿拉伯数字0)
-
八进制
以0开头(0是阿拉伯数字0)
-
二进制
以0b或0B开头(0是阿拉伯数字0)
例子:
#include<stdio.h>
void main(){
int a = 0xFF; //十六进制
int b = 08; //八进制
int c = 0B10101; //二进制
}
Ⅱ. 科学计数法
只有double类型可以进行科学计数法
double a = 3E2; //表示3 x 10^2,所以a = 300
//10^2表示10的2次幂
- E大小写都可以,但为了便于区分,一般使用大写E
- E后面的数可以是必须是整数(正、负或0都可以),不能是小数
Ⅲ. 长整型long的问题(重要)
声明长整型时数的后面要加上L
long a = 666L;
L大小写都可以,但为了便于区分,一般使用大写L
Ⅲ. 浮点型float的问题(重要)
声明float时数的后面要加上F,因为默认的浮点型都是double
float a = 3.14F;
F大小写都可以
文章到这里就结束了,我们下节再见