数据类型
整型
关键字 | 意义 |
---|---|
short | 占用空间:2字节 ;占位符:%hd |
int | 占用空间:4字节 ;占位符:%d |
long | 占用空间:4字节 ;占位符:%ld |
long long | 占用空间:8字节 ;占位符:%lld |
int32_t | 在stdint.h头文件中表示32位的有符号整型;同样可以有int64_t…… |
int_least8_t | 表示可容纳8位有符号整型中宽度最小的一个整型别名 |
int_fast8_t | 表示对8位有符号值而言运算速度最快的整型别名 |
intmax_t | 可存储任何有符号整型值 |
如果一个整型变量的初始化值或赋值为浮点数,则直接丢弃小数部分,不进行四舍五入。
字符型
关键字 | 意义 |
---|---|
char | 如果用ASCII码赋值则直接:char ch = 89;直接赋值ASCII码的数字;如果要赋值字符(字母,数字,操作)或者用八进制,16进制表示的ASCII码,则需要加入’ '单引号:char ch = ‘A’。 占位符:%c |
浮点型
关键字 | 意义 |
---|---|
float | 单精度浮点型;占位符:%f |
double | 双精度浮点型; 占位符:%lf |
long double | 比double精度更高的浮点型 |
十进制浮点型常量的基本形式是指数记数法
例如3141.5926 记:3.1415926e3
无论是初始化还是赋值一个数值,这个数值默认都是double类型,如想要float类型则需要特殊标注出来,例如:float xs = 3.05f;
因为浮点数在内存中存储方式的原因,存储的浮点数输出时可能和初始化时或赋值时不同。
十进制小数转化成二进制时,是将小数部分不断2,每次2后得到的整数部分为1或不足1则取0;如此一直重复下去,有的十进制小数转化为二进制时是无限不循环小数,而存储时只能存储前几十位,会舍去后面的,所以会造成误差。
如上图,小数部分用二进制表示为:011……
占位符(转换说明)
占位符 | 用处 |
---|---|
%d | 用于int类型 |
%ld | 用于long类型 |
%lld | 用于long long类型 |
%c | 用于char类型 |
%f | 用于float或double类型 |
%e | 用于float或double类型中,要输出以科学记数法表示的数(带e的数,e代表10) |
%a | 用于float或double类型中,要输出以十六进制科学记数法表示的数(类似于上一条,不过用p代替e,p代表2) |
%0 | 用于输出八进制的数(数前面没有0) |
%x | 用于输出十六进制的数 (数前面没有0x) |
%#0 | 用于输出八进制的数 (数前面有0) |
%#x | 用于输出十六进制的数(数前面有0x) |
当两个变量项相乘时,用于输出的占位符必须是与两变量类型相对应的占位符。
int main(void)
{
int age;
long long second = 3.156e7;
printf("请输入你的年龄:");
scanf_s("%d", &age);
printf("你到目前为止度过了%lld秒", age * second);
//%lld这个位置的占位符必须是与变量age或second数据类型相对应的占位符
return 0;
}
数据溢出
可以把数据类型的范围看成一个循环,如果进行初始化或赋值时的数值过大超过上限,则可以把超过上限的部分从下限开始往上加。
例如:char ch1 = 129;则输出结果等同于:char ch2 = -127;的输出结果。(char的取值范围是-128到127)