目录
一、数据类型
1、分类原因
现实中数据是自带属性类别
对数据分类可以节约内存存储空间、提高运行速度
2、存储空间单位
Bit 比特 存储一个二进制位,只能存0或1,计算机存储的最小单位
Byte 字节 1Byte=8Bit 字节是计算机存储的基本单位
Kb 1024Byte
Mb 1024Kb
Gb 1024Mb
Tb 1024Gb
Pb 1024Tb
3、数据类别
1. 自建(程序员自己设计)
2. 内建(C语言自带的)
4、类型分类
①整型
| 类型名 | 字节数 | 数据范围 | 备注 | |
| signed 有符号 | signed char | 1 | -128~127 | 最高位是符号位, 数据位7位 0正数 1负数 |
| signed short | 2 | -32768~32767 | ||
| signed int | 4 | ±20亿 | ||
| signed long | 4(32位)/8(64位) | ±20亿/±9开头19位整数 | ||
| signed long long | 8 | ±9开头19位整数 | ||
| *注意:signed不加等同于加了,即signed char==char | ||||
| 类型名 | 字节数 | 数据范围 | 备注 | |
| unsigned 无符号 | unsigned char | 1 | 0~255 | 二进制最高位数据位 |
| unsigned short | 2 | 0~65535 | ||
| unsigned int | 4 | 0~40亿 | ||
| unsigned long | 4(32位)/8(64位) | 0~40亿/0~1开头20位整数 | ||
| unsigned long long | 8 | 0~1开头20位整数 | ||
| *注意:由于定义无符号数据时比较麻烦,因此在标准库中把这些类型重新定义成了新的类型名使用时需要包含一个头文件 <stdint.h>。 无符号 uint8_t/uin16_t/uint32_t/uint64_t 有符号 int8_t/in16_t/int32_t/int64_t | ||||
②浮点型
| 类型名 | 字节数 | 备注 |
| float | 4 | 单精度 |
| double | 8 | 双精度 |
| long double | 12(32位)/16(64位) | |
| *注意: 1.采取科学计数法,在二进制与真实数据之间需要进行换算过程,因此浮点数的运算使用速度比整形慢得多,编程时尽量使用整形 2.大部分操作系统只对小数点后6位有效 | ||
③模拟型
| 字符型 | 布尔型 | |
| 表示 | char | bool |
| 备注 | 字符就是图案或符号,字符在内存中依然存储成整数,需要显示成字符时候,操作系统会根据ASCII码表中的对应关系把整数显示成对应的符号或字符 | 先有c语言,再有布尔,C语言中不可能有真正的布尔类型,都是<stdbool.h>中对bool类型使用整数进行模拟 |
二、变量与常量
1、变量
①含义:在程序运行期间值可以发生变化的叫做变量,相当于存放数据的盒子
②定义:类型名 变量名; 例:int num;
③取名规则
A. 组成只能由字母、数字、下划线
B. 不能以数字开头
C. 不能与c语言关键字(32个)重名
D. 见名知意(功能、类型、范围...)
④使用
赋值:变量名 = val; 变量初始值默认是随机的,为了安全,一般在定义时会初始化为0
参与运算:变量名*10(可替换);
⑤变量的输出
int printf(const char *format, ...);
功能:输出数据
format:"提示信息+占位符"
...:变量名列表
int返回值:成功输出的字符个数
占位符:C语言通过占位符的方式传递变量的类型
| 整型 | |||||
| 占位符 | char | short | int | long | long long |
| signed | %hhd | %hd | %d | %ld | %lld |
| unsigned | %hhu | %hu | %u | %lu | %llu |
| 浮点型 | |||||
| float | %f | double | %lf | long double | %LF |
| 字符型 | |||||
| char | %q | ||||
⑥变量的输入
int scanf(const char *format, ...);
功能:输入数据
format:"占位符""1990-2-3"
...:变量地址列表
*注意: 1. scanf需要变量类型和地址
2. 变量地址==&变量名
3. 返回值:成功输入的变量个数
2、常量
含义:在程序运行期间数值不发生变化的叫做常量
举例:10 默认int类型 有符号
10l long
10ll long long
10u 无符号的int
10lu 无符号的long
10llu 无符号的long long
3.14 默认double
3.14f float
3.14lf long double
三、数据的格式化输出
| 格式化符号 | 说明 |
| %nd | 最少显示n个字符宽度,不足时左补空格,右对齐 |
| %-nd | 最少显示n个字符宽度,不足时右补空格,左对齐 |
| %0nd | 最少显示n个字符宽度,不足时补0,右对齐 |
| %n.mf | 显示n个字符宽度(小数点也算一位)并保留m位小数(四舍五入),不足补空格,右对齐 |
| %g | 匹配float和double,能砍掉多余的0 |
四、运算符
1、自变运算符
++/-- 让变量的值自动加1或减1
前自变:++/--num 立即有效
后自变:num++/-- 下一行语句才有效
注意:不要在一行代码中多次出现自变运算符
2、算术运算符
+ - * / %
*注意:① 整数/整数 只保留整数部分
② / % 除数不能为0,否则会在运行时出现浮点数例外(核心已转储)
③ % 不能对浮点数求余
3、关系运算符
== != > < >= <=
会得到比较结果是1(成立)或0(不成立),比较的结果还可以继续参与运算
int n = -10;
10 < n < 100; 与数学比较不一样,是永远为真
*注意:建议常量放== != 的左边,防止少些一个=
4、逻辑运算符
&& || !
会先把运算对象转换成逻辑值:非零转为真,0转为假,然后再参与逻辑运算
A && B 一假即假
A || B 一真即真
!A 求反
&& 和 || 的短路特性:
1、当左边部分的值已经可以确定整个逻辑运算符的结果时,那么右边部分不执行
2、也可以借助短路特性,实现简单的单分支效果
5、三目运算符
A ? B : C
先判断A的值如果为真(非0)则执行B否则执行C
6、赋值运算符
= += -= ...
*注意:赋值运算符的运算结果是右边赋的数据
7、位运算符
& | ~ ^ << >>
*注:1.sizeof()可以计算类型/变量所占内存字节数,但它也是一个运算符
2.运算符有优先级,如果记不住,多加小括号
五、类型转换问题
1、只有相同类型的数据才能进行运算,如果类型不相同的数据需要先转换成相同的类型才能运算
2、自动类型转换
转换规则:以不丢失数据位基础,可以适当地牺牲一些空间
①字节少向字节多的转
②有符号向无符号的转
③整型向浮点型转
*注意:优先顺序①②③, 当运算类型对象只是char或short且类型不同 编译器会做类型提升为int
3、强制类型转换
(新类型名)数据;
有丢失数据的风险,但是需要使用时还是得用
文章详细介绍了C语言中的数据类型,包括分类原因、存储空间单位、数据类别和类型分类。接着讨论了变量和常量的概念、定义、命名规则以及如何使用。此外,还涵盖了数据的格式化输出、各种运算符(如自变运算符、算术运算符、关系运算符、逻辑运算符等)的用法,以及类型转换的问题,强调了自动转换和强制转换的规则。
1110

被折叠的 条评论
为什么被折叠?



