跳到主要内容

数据和 C

数据类型关键字

image-20201115000217706

计算机存储方式可以分为 2 大类:整数类型和浮点数类型。

位(bit):可以存储 0 和 1.位是计算机内存的基本构建块。 字节(byte):1 字节均为 8 位。 字(ward):对于 8 位机:1 一个字长只有 8 位,计算机的字长越大,其数据转换越快,允许的内存访问也更多。

整型和浮点型

计算机以二进制存储整数。

计算机把浮点型分为小数部分和指数部分来表示,且分开存储这俩部分

int 类型——有符号整型

int num = 10; // 在printf的时候, int类型 用 %d 表示

八进制和十六进制

  • 0X0x 前缀表示十六进制数
  • 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 doublelong double

浮点数正号可以省略,可以没有小数点或者指数部分,但是不能同时省略两者。

printf函数使用%f转换说明打印十进制记数法的floatdouble类型浮点数。

%e打印指数记数法的浮点数。如果系统支持十六进制格式的浮点数,可以用 a 和 A 分别代替 e 和 E。

打印long double类型要使用%Lf %Le %La转换说明。

sizeof()

sizeof()是 C 语言的内置运算符,以字节为单位给出指定类型的大小。

C99 和 C11 提供 %zd转换说明匹配sizeof()的返回类型。