C语言数据类型和变量

1. 数据类型介绍

       C语言提供了丰富的数据类型来描述生活中的各种数据。使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数。

       所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。

       以下为C语言提供的各种数据类型,主要探讨内置数据类型哦。

1.1 字符型([  ]表示可省略)
char
[signed] char //有符号的
unsigned char //⽆符号的
1.2 整型(C99中引入更长的整型)
//短整型
short [int]
[signed] short [int]
unsigned short [int]
//整型
int
[signed] int
unsigned int
//长整型
long [int]
[signed] long [int]
unsigned long [int]
//更长的整型
long long [int]
[signed] long long [int]
unsigned long long [int]
1.3 浮点型
float
double
long double
1.4 布尔类型

C语言原来没有为布尔值单独设置一个类型,而是使用整数 0 表示假,非零值表示真。 C99 中引入布尔类型 ,专门表示真假。

_Bool 

布尔类型的使用得包含头文件  <stdbool.h>
布尔类型变量的取值是: true 或者 false .

1.5 各种数据类型的长度

每种数据类型都有自己的长度,不同的数据类型,能创建出长度不同的变量,变量长度的不同,存储的数据范围就有所差异。

1.5 sizeof 操作符

sizeof 是一个关键字,也是操作符,专门是用来计算sizeof的操作符数的类型长度的,单位是字节
sizeof 操作符的操作数可以是类型,也可是变量或者表达式。

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

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

sizeof 的计算结果是 size_t 类型的。

//VS2022  X64配置下
printf("%zd\n", sizeof(char));//1
printf("%zd\n", sizeof(_Bool));//1
printf("%zd\n", sizeof(short));//2
printf("%zd\n", sizeof(int));//4
printf("%zd\n", sizeof(long));//4
printf("%zd\n", sizeof(long long));//8
printf("%zd\n", sizeof(float));//4
printf("%zd\n", sizeof(double));//8
printf("%zd\n", sizeof(long double));//8
#include <stdio.h>
int main()
{
short s = 2;
int b = 10;
printf("%d\n", sizeof(s = b+1));//表达式不计算,s是short int类型,打印出2
printf("s = %d\n", s);
return 0;
}

2. signed 和 unsigned

C语言使用 signed 和 unsigned 关键字修饰字符型和整型类型的。

signed 关键字,表示一个类型带有正负号,包含负值;
unsigned 关键字,表示该类型不带有正负号,只能表示零和正整数。
对于 int 类型,默认是带有正负号的,也就是说 int 等同于 signed int 。由于这是默认情况,关键字 signed 一般都省略不写,但是写了也不算错。

3. 变量

类型是用来创建变量的。C语言中把经常变化的值称为变量,不变的值称为常量。

变量创建的语法形式

数据类型+变量名
int age; //整型变量
char ch; //字符变量
double weight; //浮点型变量

在创建变量的时候给一个初始值,就叫变量的初始化。

4.变量的分类

• 全局变量:在大括号外部定义的变量就是全局变量
全局变量的使用范围更广,整个工程中想使用,都是有办法使用的。
• 局部变量:在大括号内部定义的变量就是局部变量
局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的。

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

在学习C/C++语言的时候,我们会关注内存中的三个区域:栈区、堆区、静态区。

1. 局部变量是放在内存的栈区
2. 全局变量是放在内存的静态区
3. 堆区是用来动态内存管理的。

5. 算术操作符:+、-、*、/、%

这些操作符都是双目操作符

注:操作符也被叫做:运算符

双目操作符都是有2个操作数的,位于操作符两端的就是它们的操作数。

使用 ' / ' 时若希望得到浮点数的结果,两个运算数必须有一个浮点数,这时就会进行浮点数除法。 如6 / 4 得到的结果是 1.0 ,而不是1.5 。原因就在于C语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分。若想让结果为1.5,则需将表达式改为 6.0 / 4 或 6 / 4.0。

' % ' 这个运算符只能用于整数,不能用于浮点数。表示求模运算,结果为两个整数相除的余数。其中负数求模的规则是,结果的正负号由第一个运算数的正负号决定

6. 赋值操作符:= 和复合赋值

' = ' 可以用于给刚创建的变量赋值。其中连续赋值是从右向左依次赋值,在这里不推荐连续赋值,不好观察细节。

复合赋值符

+=            -=
*=     /=     %=
>>=          <<=
&=     |=     ^=

7. 单目操作符:++、--、+(正)、-(负)

 ++ 和  --
++是一种自增的操作符,又分为前置++和后置++,--是一种自减的操作符,也分为前置--和后置--

前置++      计算口诀:先+1,后使用;

后置++      计算口诀:先使用,后+1

 前置--       计算口诀:先-1,后使用

 后置--       计算口诀:先使用,后-1

8. 强制类型转换

int a = 3.14;
//a的是int类型, 3.14是double类型,两边的类型不一致,编译器会报警告

为了消除这个警告,我们可以使用强制类型转换:

int a = (int)3.14; //意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分

9. printf

9.1 printf 基本用法

printf() 的作用是将参数文本输出到屏幕。printf() 不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符 \n 。

printf() 使用之前,必须在源码文件头部引入头文件 stdio.h

9.2 占位符

所谓“占位符”,就是这个位置可以用其他值代入。

输出文本里面可以使用多个占位符

printf() 参数与占位符是一一对应关系,如果有 n 个占位符, printf() 的参数就应该有 n +1 个。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。

9.3 占位符列举(常用加粗)

%a :十六进制浮点数,字母输出为小写。
%A :十六进制浮点数,字母输出为大写。
%c :字符。
%d :⼗进制整数。
%e :使用科学计数法的浮点数,指数部分的 e 为小写。
%E :使用科学计数法的浮点数,指数部分的 E 为大写。
%i :整数,基本等同于 %d 。
%f :小数(包含 float 类型和 double 类型)。
%g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会自动转为科学计数法,指数部分的 e
为小写。
%G :等同于 %g ,唯⼀的区别是指数部分的 E 为大写。
%hd :十进制 short int 类型。
%ho :八进制 short int 类型。
%hx :十六进制 short int 类型。
%hu :unsigned short int 类型。
%ld :十进制 long int 类型。
%lo :八进制 long int 类型。
%lx :十六进制 long int 类型。
%lu :unsigned long int 类型。
%lld :十进制 long long int 类型。
%llo :八进制 long long int 类型。
%llx :十六进制 long long int 类型。
%llu :unsigned long long int 类型。
%Le :科学计数法表示的 long double 类型浮点数。
%Lf :long double 类型浮点数。
%n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
%o :八进制整数。
%p :指针。
%s :字符串。
%u :无符号整数(unsigned int)。
%x :十六进制整数。
%zd : size_t 类型。
%% :输出⼀个百分号。

9.4 输出格式
printf() 可以定制占位符的输出格式。
限定宽度
printf() 允许限定占位符的最小宽度。

 %5d 表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。输出的值默认是右对齐,即输出内容前面会有空格;如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的 % 的后面插入一个 - 号。

限定小数位数: 

希望小数点后面只保留两位,占位符可以写成 %.2f 。

  • 37
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值