从并夕夕来讲C语言(C语言的数据类型以及变量)

当初的计划是一周保持一篇博客的更新,结果打开手机一看,回学校的票都快被抢完了。

没办法,牺牲一周多的假期提前回学校,结果赶上被安排迎接新生活动.......
现在也是得空出两天,来更新一篇博客吧

我前面的博客就提过,我喜欢用一些生活中简单易懂的例子或是方式来讲解一个知识。

所以今天的知识我就打算用并夕夕为主要教案来讲解。

一.数据类型的介绍

当我们点击一个购物网站。我们能看到各种各样的信息。

换句话说,我们能看到丰富的数据。

比如商品的名字,价格,销量......

而在C语言当中就提供了丰富的数据类型来描述这些数据

我们可以用整数类型来描述整数,比如一箱牛奶有几瓶,一箱饼干有几包。这些都是确定的整数。

可以用字符型来描述字符,比如这个空调的名字叫“xxxx”,这个地球是“学生专用”

使用浮点型来描述小数,就像上面六箱牛奶一起272.99元。

当然数据类型的种类还有很多,今天我们主要来讨论基本类型

不同的数据有不同特点,相似的数据也拥有共同的特征。

编译器也就会根据不同数据类型进行不同操作

如果像其他博客,这里可能就要开始长篇大论的讲述各种类型了

但我在这想说一句

因为看到这篇博客的,可能有对于编程已经得心应手的前辈,也会有很多刚开始学习的小白

所以我在这要补充一点之前没有提到的小知识

二.计算机中的单位

1.计算机中的最小存储单位:bit

在前面的文章,我们提到过,计算机程序是以二进制形式存储的。

二进制的取值是0和1,

在计算机的底层存储,就是一连串的0和1组成的序号。

每一个0或是1,就是最小的存储单位————比特(bit)。

2.计算机的基本存储单位:Byte

字节是计算机存储信息的基本单位。

上面我们提到的bit,可能很多人不是特别熟悉。

但这里提到的Byte,相信大家一定都不陌生了。

Byte,也叫字节,没错就是字节跳动那个字节。

在后续文章中我们提到的字节的大小都是这个东西。

3.换算关系

    1B=8bit,
    1KB = 2^10B = 1024B,
    1MB = 2^10KB = 1024KB,
    1GB = 2^10MB = 1024MB,
    1TB = 2^10GB = 1024GB,

三.基本数据类型

在C语言当中有六种基本数据类型:short,int long,char,float,double

在次基础上,还发展出了short int,long int,long long int

在实际生活中,存在许多的数据,

在编程中,我们不能一概而论的将他们都设为一种形式。

所以,学习使用不同种类的数据类型是很有必要的

1.char

使用char时,主要用于存储字符的ASCII码。

类型占用内存大小值范围存储形式内存示意图
char1 字节-128 ~ 127补码
signed char1 字节-128 ~ 127补码
unsigned char1 字节0 ~ 255二进制

char类型存储时,占用内存大小为1字节

(有些文章会用方格来表示占用内存大小,每一个方格是1bit,四个方格是1byte)。

同时char类型又分为有符号的signed char类型和无符号的unsigned char类型

在平时编程中,如果不在char前加上符号,默认就是signed char类型

其实很好理解,就类似于正负号,不可以加上负号时,我们都默认它为正数

#define  _CRT_SECURE_NO_WARNINGS 1 
#include <stdio.h>
#include <stdbool.h>

int main() {
	char c1 = 48;
	char c2 = '0';

	signed char c3 = 65;
	signed char c4 = 'A';

	unsigned char c5 = 97;
	unsigned char c6 = 'a';

	printf("%c\n", c1);
	printf("%c\n", c2);
	printf("%c\n", c3);
	printf("%c\n", c4); 
	printf("%c\n", c5);
	printf("%c\n", c6);

	return 0;
}

看到这,有些人可能就有疑问了,为什么会出现相同的结果呢?

这就要看我们之前说到了,char类型存储的是·ASCII码

像我们输入的'0'并不是数字0,而是字符0,在ASCII码表中,它对应的值是48。

后面的'A'和'a'也是同理。

有关于signed char 和·unsigned char的使用,会涉及到二进制的补码和原码。

由于篇幅有限,无法彻底的讲解,我将在后续文章中详细讲解

2.整型

Ⅰ.short int
类型占用内存大小值范围存储形式内存示意图
short int (signed short int)2 字节-(2^15) ~ (2^15)-1补码
unsigned int2 字节0 ~ (2^16)-1二进制

short int 类型,占用内存大小为 2 个字节。

short [int] 

[signed] short [int] 

unsigned short [int]

short int 类型又分为有符号 signed short int 类型和 无符号 unsigned short int 类型,如果不在 short int 前面加上符号说明,默认是有符号 signed short int 类型。

Ⅱ.int
类型占用内存大小值范围存储形式内存示意图
int (signed int)4 字节-(2^31) ~ (2^31)-1补码
unsigned int4 字节0 ~ (2^32)-1二进制

int 类型,占用内存大小为 4 个字节。

 int

 [signed] int

 unsigned int

int 类型又分为有符号 signed int 类型和 无符号 unsigned int 类型,如果不在 int 前面加上符号说明,默认是有符号 signed int 类型。

3.浮点型

float

单精度浮点数,占4字节。

输出结果保留小数点后6位小数,多余的按照四舍五入去掉,若不满六位用0补齐。

格式说明(即占位符,由%和占位字符组成):输出/入都是%f

double

双精度浮点数,8字节。

输出结果同样保留小数点后6位,多余的按照四舍五入去掉,若不满六位用0补齐。

格式说明(占位符):输入为%lf,输出为%f。

int main() {
	float a1 = 12.34;
	float a2;
	double b1 = 23.45;
	double b2;
	scanf("%f", &a2);
	scanf("%lf", &b2);
	printf("%f\n",a1);
	printf("%f\n", a2);
	printf("%f\n", b1);
	printf("%f\n", b2);

	return 0;

 }

4.布尔类型

在C语言里判断真假有一种标准:整数0表示假,非0为真

后来在C99标准中引入了布尔类型

bool(_Bool)

表示真为true

假为false

有一点值得注意的是

使用布尔类型需要添加头文件<stdbool.h>

5.计算数据类型长度

每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不 同,存储的数据范围就有所差异。

sizeof操作符

sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字 节。

sizeof 操作符的操作数可以是类型,也可是变量或者表达式。

sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。

sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。


	int main() {

		printf("%zd\n", sizeof(char));
		printf("%zd\n", sizeof(_Bool));
		printf("%zd\n", sizeof(short));
		printf("%zd\n", sizeof(int));
		printf("%zd\n", sizeof(long));
		printf("%zd\n", sizeof(long long));
		printf("%zd\n", sizeof(float));
		printf("%zd\n", sizeof(double));
		printf("%zd\n", sizeof(long double));

		int a = 10;
		short s = 5;
		int b = 10;
		printf("%d\n",sizeof a);
		printf("%d\n", sizeof(int));
		printf("s=%d\n", sizeof(s = b + 1));
		//sizeof里面的算术不参加运算 
		//sizeof最后计算的还是s所存放的数据大小
		printf("s=%d\n", s);
		s = b + 1;
		printf("s=%d\n", s);

		

		return 0;
	}

四.变量

了解清楚了类型,那么我们使⽤类型做什么呢?

类型是⽤来创建变量的。

什么是变量呢?

C语⾔中把经常变化的值称为变量,不变的值称为常量。

变量同时也分为全局变量和局部变量

创建变量的语法形式:

数据类型  变量名

例:

int age;

char ch;

double weight;

变量的初始化:在创建变量时提供一个初始值

int a = 100;
int main() {
	int b = 10;
	{
		int c = 1;
		printf("%d\n", a);
		printf("%d\n", b);
		printf("%d\n", c);
	}
	printf("%d\n", a);
	printf("%d\n", b);
	//printf("%d\n", c);

	return 0;
}   

单这样讲还是比较枯燥,还是用并夕夕来举例子吧

像一种商品的价格,我们就通常设置为变量。

因为随着市场需求和供给变化,商品的价格也会随之发生改变

(咦,我好像在讲政治)

那如何理解全局变量和局部变量呢?

全局变量就好比你打在商场大门写着:全场9.9,样样9.9

所有的商品价格你都确定了,不管顾客拿走什么。都是9.9元出售。

而局部变量就是具体到哪个货架或是哪个商品的价格了。

他们不同的价格会不一样,也许某些数字大小相等,但你不能给他们同样一个标签牌。

局部变量只适用于局部,就好比你这商品是XX市yy超市特供,如果你拿到zz超市,那别人就不会承认你了

但这里又有一个细节了:如果局部和全局变量,名字相同呢?

#include <stdio.h>
 int n = 1000;
 int main()
 {
 int n = 10;
 printf("%d\n" n);
//
打印的结果是多少呢?
 return 0;
 }

其实当局部变量和全局变量同名的时候,局部变量优先使⽤。

说的再通俗一点,局部变量拥有“最终解释权”.

五.算术操作符

在编写代码时候,⼀定会涉及到计算。

C语⾔中为了⽅便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符。

分别是:+ - *  / % ,这些操作符都是双⽬操作符。

+ - *三个分别对应数学当中的加减乘,使用方法几乎没有过多差别,这里不在赘述

我们主要来探讨一下 / 和 %

1./

int main() {
	int a;
	scanf("%d", &a);
	printf("%d\n", 3 + 3); 
	printf("%d\n", 3 - 3);
	printf("%d\n", 3/3);
	printf("%d\n", 5 / 3);
	printf("%d\n", 5 % 3); 
	printf("%d", a);
	return 0;
}

运算符 / ⽤来完成除法。

除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。

在于C语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分。

如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时C语⾔就会进⾏浮点数除法。

2.%

运算符 % 表⽰求模(余)运算,即返回两个整数相除的余值。

这个运算符只能⽤于整数,不能⽤于浮点数。

负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定。

六.赋值

在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。

int a=100;//变量初始化

a=520;//变量赋值

赋值操作符 = 是⼀个随时可以给变量赋值的操作符。

在写代码时,我们经常可能对⼀个数进⾏⾃增、⾃减的操作,如下代码:

int a=10;
a=a+3;
a=a-2;

a+=3;
a-=2;

上面两个会和下面输出相同的结果,但按照下面的写法会更加便利。

七.单⽬操作符:++、--、+、-

1.++和--

++是⼀种⾃增的操作符,⼜分为前置++和后置++,

--是⼀种⾃减的操作符,也分为前置--和后置--.

Ⅰ.前置++

int a=10;
int b=++a;
printf("a=%d b=%d\n",a,b);

计算⼝诀:先+1,后使⽤; a原来是10,先+1,后a变成了11,再使⽤就是赋值给b,b得到的也是11,所以计算技术后,a和b都 是11

也就相当于下面的代码:


 int a = 10;
 a = a+1;
 b = a;
 printf("a=%d b=%d\n",a , b);

Ⅱ.后置++

 int a = 10;
 int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++ 
printf("a=%d b=%d\n",a,b);

a原来是10,先使⽤,就是先赋值给b,

b得到了10,然后再+1,然后a变成了11,所以直接结束后a是 11,b是10

也就相当于下面的代码:

int a = 10;
 int b = a;
 a = a+1;
 printf("a=%d b=%d\n",a , b);

前置--和后置--的操作和++相同,只不过一个是加一,一个是减一。

为锻炼大家的编程思考能力,这里就不再做机械系讲解了

(其实是我想偷懒了)

八.强制类型转换

在操作符中还有⼀种特殊的操作符是强制类型转换,语法形式很简单,形式如下:

(类型)

这个类型可能是int float double......

在VS2022当中,如果你不小心写错数据类型,开发环境会帮你更正

但我们还是要学习一下有关于⽤强制类型转换

通过强转,我们就可以得到需要的数据类型了

但是

俗话说,强扭的⽠不甜我们使⽤强制类型转换都是万不得已的时候使⽤,

如果不需要强制类型转化 就能实现代码,这样⾃然更好的。

如果你看到这里,我对你说一声谢谢。

我并不是专业的计算机讲师,也知识编程道路上的一位学者

我也希望能用自己的一点努力帮助大家更好的学习知识。

参考文献:

C语言:基本数据类型 char, short int, int_c语言char-CSDN博客

c语言---数据类型 · 浮点型(很全很基础 >O<)_c语言浮点型-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值