【C语言从零到入门】第五节 详解变量与基本数据类型

一、基本数据类型与变量

(一)c语言中的基本数据类型

c语言中的常用的数据类型有:

整数:int

浮点数(小数):float

字符:char

“整数”又被称为“整型”,“小数”又被称为“实型”

我们对于整数和小数都比较熟悉,但字符又是什么呢?不要着急,我们会在下节进行详细讲解,在本节中我们先将它当作普通的整数;

(二)变量

  • 变量类似一个装东西的盒子,你可以先把东西放里面,等需要使用时再把它取出来

  • 一个变量“盒子”理论上能放一个任何东西(只要它能装得下),但是我们要贴一个标签告诉别人这个盒子里装的是什么东西,以后别人就会根据这个标签来使用盒子里的东西。

    如果你把一个盒子的标签贴为“铅笔盒子”,但你在里面放了一个牙刷,当有人想要使用铅笔写字时,他就会从那个盒子中取出“铅笔”(其实是牙刷)并用它写字,即使那并不是铅笔也不能用来写字,他也会郑重其事地用它把字写完。

  • 变量“盒子”有些特殊,它只能放入一个东西。如果一个“盒子”里已经有一个东西,但是你又放入了一个东西,原来的东西就会被“挤出去”

现在,我们要向盒子中放入一支铅笔。

方法一:

  1. 首先,我们要拿一个盒子并贴上标签“铅笔盒子”,并给他取名为“盒子1”;

    铅笔盒子 盒子1;
    

    这个步骤较做声明变量,“铅笔盒子”是变量类型,“盒子1”是变量名。

  2. 然后,将一支铅笔放在里面;

    盒子1 = 黑色铅笔;
    

    这个步骤叫变量赋值,“=”是赋值运算符,它的作用是将等号右边的值赋给左边的变量;

方法二:

直接拿一个放铅笔的盒子并把一支铅笔放进去;

铅笔盒子 盒子1 = 黑色铅笔;

这时候,有人想要用你放在“盒子1”中的铅笔写字;

使用(盒子1);

当然,他不可能拿盒子来写字,他用的是盒子中的铅笔,不过计算机语言就是这么神奇。


现在你想向“盒子1”中放入一支蓝色的铅笔

盒子1 = 蓝色铅笔;

注意,当你放入蓝色铅笔的时候,原来盒子里的那支黑色铅笔就会消失,如果现在有人想使用“盒子1”里的铅笔,他拿到的就是蓝色的铅笔。

(三)C语言中的变量

Ⅰ.C语言中变量的声明和赋值:

  1. 声明并赋值

    变量类型 变量名 =;
    
  2. 先声明,再赋值

    变量类型 变量名;
    
    变量名 =;
    

Ⅱ. 变量名的命名规则

C语言中的变量名是不能随便起的,它要也要遵循一定的规则:

  1. 变量名中只能出现英文、数字、下划线(_)和美元符号($);

  2. 变量名不能以数字开头;

  3. 大小写敏感,如:变量a和A是两个不同的变量;

  4. 变量名不能与关键字相同;

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语言中使用变量的例子

  1. 声明变量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;
}
/*
 * 在C语言中,如果你想声明两个同样类型的变量,可以进行简写
 * 例如:
   将  int a; 
       int b;
   简写为
   int a, b;
*/

或者

#include<stdio.h>
void main(){
    int a = 1, b = 2;
    //这样简写也是可以的
}
  1. 变量名不能重复
#include<stdio.h>
void main(){
    int a = 1;
    int a = 2; //这句代码是错的,因为已经存在变量a了
}
  1. 变量的使用和修改
#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 intshort
long intlong
long long intlong long

Ⅱ. 无符号整型(正整数)

类型可以简写为
unsigned intunsigned
unsigned short intunsigned short
unsigned long intunsigned long
unsigned long long intunsigned long long

注意:不存在无符号小数

(二)变量在计算机中的存储方式

我们知道,计算机内的一切数据都是以二进制的形式存储的,变量当然也不例外

下面,我们以char类型为例讲解整数类型在计算机的存储方式

首先,我要告诉你,char是8位的,它的取值范围是-128~127

这里会有一个疑问,既然char是8位的,那么它的最大值应该是

1111 1111 (二进制)

即十进制的255

但不要忘了,char的取值还包括负数。

1.有符号类型

对于一个有符号的类型,它的二进制的最高位用来表示它的正负(1表示负数,0表示正数)

剩下的位数才表示它的大小

例如char类型的127

0111 1111

  • 正数的表示方法

    对于正数,它在计算机中的存储方式就是它的二进制

  • 负数的表示方法

    负数在计算机中是利用补码表示的

取补码的规则:

  1. 求它绝对值的二进制
  2. 令符号位即最高位得1
  3. 符号位不变,其他位取反(取反就是0变1,1变0)
  4. 最后令结果加1

例如求-1的补码

  1. 求它绝对值1的二进制

    0000 0001

  2. 将符号位变为1
    1000 0001

  3. 对其余位进行取反
    1111 1110

  4. 最后加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-11Byte
unsigned char0 ~ 2550 ~ 2^8-11Byte
short-32767 ~ + 32768-2^15 ~ 2^15-12 Bytes
unsigned short0 ~ 655360 ~ 2^16-12 Bytes
int/long-2147483648 ~ +2147483647-2^31 ~ 2^31-14 Bytes
unsigned int/long0 ~ 42949672950 ~ 2^32-14 Bytes
long long-9223372036854775808 ~ +9223372036854775807-2^63 ~ 2^63-18 Bytes
unsigned long long0 ~ 184467440737095516150 ~ 2^64-18 Bytes
float\+/- 3.40282e+0384 Bytes
double\+/- 1.79769e+3088 Bytes

三、基本类型的注意事项

Ⅰ. 表示其他进制

只有整数可以表示其他进制

  1. 十六进制

    以0x或0X开头(0是阿拉伯数字0)

  2. 八进制

    以0开头(0是阿拉伯数字0)

  3. 二进制

    以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大小写都可以





文章到这里就结束了,我们下一节再见

点击查看更多【C语言从零到入门】系列

每周五晚20:00更新

posted @ 2020-05-15 21:11  CloudSir  阅读(54)  评论(0)    收藏  举报