C语言中的数据类型和变量以及简单的操作符

C语言中的数据类型和变量以及简单的操作符

前言

本文将围绕C语言中的多种数据类型,变量和简单的操作符进行介绍,并结合自己的学习过程中的疑惑,来帮助大家更好的理解其内容。本文适用于VS2022,x64配置。


数据类型

C语言中的数据类型
C语言中的数据类型可以分为内置类型和自定义类型,其包含的数据类型如图。本文将介绍内置类型中的四种数据类型:字符型、整型、浮点型、布尔类型。自定义类型的数据会在之后讲解。


字符型

字符型变量用 char 来定义,存储大小为1个字节,取值范围为 -128 到 127 或 0 到 255(字符型数据可以分为signedunsigned,分别对应两者的取值范围,文章后面会介绍signedsusigned)。


整型

整型变量用int来定义,存储大小为4个字节,取值范围为 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647(同上)。
整型数据还可以分为短整型、整型、长整型、更长的整型。


浮点型

浮点型变量用float来定义,存储大小为4个字节,取值范围为1.2E-38 到 3.4E+38。
浮点型数据还可以分为浮点型、双精度浮点型、拓展精度浮点型。
float类型的数据默认输出6位小数。
C语言中的小数在没有规定数据类型的情况下,会默认为是double类型。


布尔类型

布尔类型变量用bool来定义,存储大小为1个字节,取值是:true或者false
布尔类型的使⽤需要包含头⽂件 <stdbool.h>
布尔类型的数据常用在循环或分支的判断条件中


signedunsigned

signedunsigned是两个关键字,用来修饰整型字符型数据或变量。
signed表示该类型带有正负号,包含负值
unsigned表示该类型不带负号,只能表示零或正值


对于int类型来说,默认是带负号的,所以int等同于signed intsigned一般可以省略
如果想表示非负整型,则必须声明unsigned int,不能省略unsigned,但是可以省略int
整型数变量声明为unsigned的好处是,同样⻓度的内存能够表示的最⼤整数值,增大了⼀倍。(如上)
对于char类型来说,char类型默认是否带有正负号,由当前系统决定。
所以char不等同于signed char,它有可能是signed char,也有可能是unsigned char

判断数据类型的大小/长度

sizeof的介绍

可以使用sizeof操作符来计算操作符、变量或表达式的长度,单位是字节。
sizeof不仅仅是操作符,同时也是关键字。
sizeof的操作数如果不是类型,是表达式的时候,可以省略掉后边括号。
sizeof 后边的表达式不真实参与运算,根据表达式的类型来得出大小。
sizeof 的计算结果是 size_t 类型,打印时使用%zd

#include<stdio.h>

int main()
{
	int a = 10;
	printf("%zd\n", sizeof(a));
	printf("%zd\n", sizeof a);//a是变量的名字,可以省略掉sizeof后边的()
 	printf("%zd\n", sizeof(int)); //sizeof可以判断数据类型的大小
 	printf("%zd\n", sizeof(3 + 3.5)); //sizeof可以判断表达式的大小
 	//sizeof中的表达式不参与运算,在计算 3+3.5 的大小时,
 	//由于表达式为 整型+双精度浮点型 ,所以结果应该为双精度浮点型
 	//所以sizeof会计算双精度浮点型数据的大小
 	return 0;
}

上述代码的输出结果为:4 4 4 8

下面通过一个例子来证明sizeof中的表达式不计算

//证明:sizeof中表达式不计算
#include <stdio.h>
int main()
{
 short s = 2;
 int b = 10;
 printf("%d\n", sizeof(s = b+1));//sizeof根据最终数据会放进变量s中,而s是短整型数据,所以输出2
 printf("s = %d\n", s);//如果s仍为2,则表达式未计算,如果s值变为11,则表达式计算。实际输出为2
 return 0;
}

上述代码输出结果为:2 s = 2


计算各种数据类型的大小/长度

#include <stdio.h>
#include<stdbool.h>
int main()
{
    printf("%zd\n", sizeof(char));
	printf("%zd\n", sizeof(_Bool)); //或sizeof(bool)或sizeof(true)
	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));
 	return 0;
}

上述代码的输出结果为:1 1 2 4 4 8 4 8 8


变量

变量的创建

知道了数据类型,我们就可以创建变量,因为C语言中创建变量时必须指定变量的类型
变量创建的语法形式如下:

data_type name;
 	  |    |
 	  |    |
 数据类型 变量名

如果在变量创建的时候就给定一个初始值,称为初始化。

变量的分类

变量分为局部变量和全局变量。
局部变量存储在内存的栈区,全局变量存储在内存的静态区。
在大括号内定义的变量就是局部变量,在大括号外定义的变量就是全局变量。
局部变量和全局变量的名字可以相同,使用时局部变量优先。

#include <stdio.h>
int a = 2023;//全局变量
int main()
{
	int a = 2018;//局部变量
 	printf("%d\n", a);
 	return 0;
}

上述代码的输出结果为:2018


算术操作符

算术操作符包括:+ - * / % 分别为加、减、乘、除、取余
算术操作符都是双目操作符
对于+ - * /来说,如果两个操作数都是整型,则结果为整型,如果想得到浮点型数据,则至少要有一个操作数为浮点型。
取余 % 只能用于两个整数

赋值操作符

C语言中支持连续赋值和复合赋值
如:连续赋值

int a = 3;
int b = 5;
int c = 0;
c = b = a+3;//连续赋值,从右向左依次赋值的。

这样的操作语法上是没有问题的,但是比较乱,不便于调试,所以一般还是分开赋值,连续赋值用的不多。


如:复合赋值

int a = 10;
a += 3; // 等价于 a=a+3
a -= 2; //  等价于 a=a-2

支持符合赋值的复合赋值符还有:
+= -= *= /= %=

>>= <<= &= |= ^= 这些以后再介绍,涉及到二进制

单目操作符

单目操作符就是只有一个操作数的操作符
单目操作符包括:++ -- + -

++--

自增操作符和自减操作符,每次运行后会把操作数据+1-1
分为前置和后置,前置先自增(自减),后使用;后置先使用,再自增(自减)
前置:

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

上述代码的运行结果为:a=11 b=11


后置:

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

上述代码的运行结果为:a=11 b=10

+-

这里的+-不是加减,而是正负
`+``一般可以省略

结语

本来还想再介绍一些自己的错例的,不过看了看都不是什么很大的问题,大家如果遇到了应该也能解决,所以就先不写了。等学到后面如果我遇到一些易错点或我认为比较重要或容易搞错的地方,我会在介绍完知识点后,在文章最后给大家看一看,这一章就到这里吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值