C语言中有四种基本数据类型—整型、浮点型、指针和聚合类型(数组和结构等)。其他类型由此四种派生而成。
1、 整数类型
整型包含:字符(char),整型(int),长整型(long)和短整型(short),都分为有符号(signed)和无符号(unsigned)两种。
按位数有short<=int<=long,其中short至少16位,long至少32位。因此虽然直观上会认为short比较短,long比较长,但实际上两者可能一样长,而int的位数则由编译器决定。因此在设计数值计算时,应该确定其位数,做好溢出处理。
字符char占用八位,设计的目的在于容纳字符数据,但本质上是小整型。char在用关键字signed/unsigned修饰的时候与其他几种整型有一个区别。一般,对int,long,short,当不用signed/unsigned修饰时,默认为signed,但char的默认值与编译器有关。
下表为不同类型的位数和范围
类型 | 占用位数 | 数值范围 |
char | 8位 | (一般只用0~127) |
signed char | 8位 | -127~127 |
unsigned char | 8位 | 0~255 |
(signed) int | 16位或32位 | — |
unsigned int | 同int | — |
(signed) long (int) | 不小于32位 | -2147483647~2147483647 |
unsigned long (int) | 同long | 0~4294967295 |
(signed) short (int) | 不小于16位 | -32767~32767 |
unsigned short (int) | unsigned short (int) | 0~65535 |
(signed) long long (int) | 64位 | 范围太长 |
(unsigned) long long (int) | 同long long | 范围太长 |
一、整型变量的声明和初始化
整型变量的声明形式为: 关键字 变量名;(中间空格隔开)
如:
int a;
初始化则是在声明之后对变量赋初始值
如:
直接int a = 1;
或 int a;a = 1;
最常见的是按十进制赋值,也可按八进制和十六进制赋值,在数字前面加一个0则为八进制赋值,加0x或0X则为十六进制赋值。
当用八进制赋值时,数字不在0~7之间会提示错误,十六进制亦然。
如:
int a = 012;//8进制12,十进制为10。
inta = 0x11;//十六进制11,十进制为17。
inta = 018;//编译器提示错误。
计算机通过编码将特定的字符用特定的整数值来表示,一般采用ASCII码。因此对char类型的赋值有两种形式。一种是直接数字赋值,一种是用字符赋值,字符由’ ’括起来。
如:
chara = ‘A’;
chara = 96;//两者都是声明字符变量a,初始化为字符A。
chara;a = “X”;//错误,正确方式:a = ‘X’;
二、整型常量
当代码中用到如123这样的数字时,编译器以最小可容纳该数值的类型来存储相应数字。也可以通过一些后缀来指定存储类型。L(或小写l)后缀表明数字为long类型,U(或小写u)后缀表明数字为unsigned类型,两者可以组合使用。
如:
123U为unsigned int 类型
123UL为 unsigned long 类型
123ULL为unsigned long long 类型
字符常量一般以’单个字符’来表示。
2、 浮点型
浮点型包含float,double和long double类型,用来表示不同精度的小数。本文不做讨论。
3、 指针
变量的值在计算机的内存中占用一个特定的位置和相应大小的空间。内存与地址一一对应,因此,通过地址就能得到其上变量的值。指针是一种值为地址的数据类型。本文不做详细讨论。
4、 格式化输出
Printf()、scanf ()函数时与程序通信的I/O接口。调用printf()通过特定的转换说明符可以打印出相应的数据。
常用转换符:
转换说明 | 输出 |
%c | 一个字符 |
%s | 字符串 |
%d | 有符号十进制整数 |
%u | 无符号十进制整数 |
%o | 无符号八进制整数 |
%x或%X | 无符号十六进制整数 |
%p | 指针 |
%f | 十进制浮点数 |
%e或%E | 浮点数的e-计数法,E-计数法 |
|
|
修饰符:
修饰符 | 说明 |
h | 输出short类型。%hd,%hx,%hu分别为十进制short,十六进制short,十进制unsigned short |
l | 输出long类型。%ld,%lu分别输出 long int和unsigned long int |
ll | 输出long long类型。%lld,%llu,同上 |
# | 输出进制格式。%#x,%#X,%#o分别输出0x,0X,0这三种进制的前缀 |
%数字 | 输出的位宽,%7输出为7位宽,数字向右对齐,数字为负时,相左对齐。 |