数据和 C
数据类型关键字
计算机存储方式可以分为 2 大类:整数类型和浮点数类型。
位(bit):可以存储 0 和 1.位是计算机内存的基本构建块。 字节(byte):1 字节均为 8 位。 字(ward):对于 8 位机:1 一个字长只有 8 位,计算机的字长越大,其数据转换越快,允许的内存访问也更多。
整型和浮点型
计算机以二进制存储整数。
计算机把浮点型分为小数部分和指数部分来表示,且分开存储这俩部分
int 类型——有符号整型
int num = 10; // 在printf的时候, int类型 用 %d 表示
八进制和十六进制
0X
或0x
前缀表示十六进制数- 0 前缀表示八进制数
在 printf
函数中显示八进制和十六进制:
- 十进制:
%d
- 八进制:
%o
显示前缀%#o
- 十六进制:
%x
显示前缀%#x
其他整型
short int | short
占的储存空间比 int
少,常用于较小值的场合,有符号整型。
long int | long
占的储存空间比 int
多,常用于较大值的场合,有符号整型。
long long int | long long
占的储存空间可能比 long
多,常用于更大值的场合,盖类型至少占 64 位,有符号整型。
unsigned int | unsigned
只用于非负场合。
unsigned long int | unsigned long
只用于非负场合。
unsigned short int | unsigned short
只用于非负场合。
unsigned long long int | unsigned long long
只用于非负场合。
signed
可强调使用有符号类型的意图。short
short int
signed short int
signed short
都表示同一种类型。
现在,个人计算机常见的设置是,long long
占 64 位, long
占 32 位, short
占 16 位,int
占 16 或 32 位。原则上,这 4 中类型代表不同的大小,但是实际上通常有重叠。
long 常量 和 long long 常量:
long 常量
用 %d
long long 常量
用 %u
/* 溢出行为 */
#include <stdio.h>
int main(void)
{
int i = 2147483647;
unsigned int j = 4294967295;
printf("%d | %d | %d \n", i, i + 1, i + 2); // 2147483647 | -2147483648 | -2147483647
printf("%u | %u | %u \n", j, j + 1, j + 2); // 4294967295 | 0 | 1
return 0;
}
打印short, long, long long, and unsigned
类型
- 打印
unsigned int
类型,使用%u
转换说明 - 打印
long
类型,使用%ld
转换说明 如果系统中 int 和 long 大小相同时,使用%d
就行了(但是慎用)。 - 打印
unsigned int
类型,使用%u
转换说明 - 打印
unsigned int
类型,使用%u
转换说明
对于short
类型,%hd
表示以十进制显示short
类型的整数,%ho
显示八进制的shout
整数。
对于无符号整型,%lu
表示打印unsigned long
类型的值;
对于支持long long
类型的系统,%lld
和 %llu
分别表示有符号和无符号类型。
#include <stdio.h>
int main(void)
{
unsigned int un = 3000000000; /* system with 32-bit int */
short end = 200; /* and 16-bit short */
long big = 65537;
long long verybig = 12345678908642;
printf("un = %u and not %d\n", un, un);
printf("end = %hd and %d\n", end, end);
printf("big = %ld and not %hd\n", big, big);
printf("verybig= %lld and not %ld\n", verybig, verybig);
return 0;
}
/*
un = 3000000000 and not -1294967296
end = 200 and 200
big = 65537 and not 1
verybig= 12345678908642 and not 12345678908642
*/
char 类型
printf
使用%c
表示打印字符。
_Bool
类型
C99 标准添加了_Bool
类型,用于表示布尔值,即逻辑值 true
和 false`。
float
double
和 long double
浮点数正号可以省略,可以没有小数点或者指数部分,但是不能同时省略两者。
printf
函数使用%f
转换说明打印十进制记数法的float
和double
类型浮点数。
用%e
打印指数记数法的浮点数。如果系统支持十六进制格式的浮点数,可以用 a 和 A 分别代替 e 和 E。
打印long double
类型要使用%Lf
%Le
%La
转换说明。
sizeof()
sizeof()
是 C 语言的内置运算符,以字节为单位给出指定类型的大小。
C99 和 C11 提供 %zd
转换说明匹配sizeof()
的返回类型。