整型常量即整常数。C 的整常数可以用以下三种形式表示:
(1)十进制整数。
如 123,-456,0。
(2)八进制整数。
如 0123 表示八进制数 123,即
( 123 ) 8 = 1 × 8 2 + 2 × 8 1 + 3 × 8 0 = 83 (123)_8=1\times 8^2+2\times8^1+3\times8^0= 83 (123)8?=1×82+2×81+3×80=83
如 -011 表示八进制 -11,即十进制数 -9。
(3)十六进制整数。
如 0x123,代表十进制 123,即
( 123 ) 16 = 1 × 1 6 2 + 2 × 1 6 1 + 3 × 1 6 0 = 291 (123)_{16}=1\times16^2+2\times16^1+3\times16^0=291 (123)16?=1×162+2×161+3×160=291
如 -0x12 等于十进制数 -18。
数据在内存中是以二进制形式存放的。
在实际中,数值是以补码的形式表示的。
- 一个正数的补码和原码的形式相同。
- 求负数的补码的方法:将该数的绝对值的二进制形式,按位取反再加 1。
int i,j; //定义2个整型变量
i = 10; //给 i 赋以整数 10
j = -10; //给 j 赋以整数 -10
注意:在16位系统中,整型才占用2个字节。在32位系统中,整型占4个字节。在不特殊说明的情况下,本书中讨论的就是16位系统。
类型说明 | 类型 | 占位数 | 取值范围 |
---|---|---|---|
有符号基本整型 | [signed] int | 16 | -32768~32767 |
无符号基本整型 | unsigned int | 16 | 0~65535 |
有符号短整型 | [signed] short [int] | 16 | -32768~32767 |
无符号短整型 | unsigned short [int] | 16 | 0~65535 |
有符号长整型 | long [int] | 32 | -2147483648~2147483647 |
无符号长整型 | unsigned long [int] | 32 | 0~4294967295 |
例如:
int a; //定义有符号整型变量a
unsigned int b; //定义无符号整型变量b
前面已经提到,C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。
对变量的定义,一般放在一个函数的开头部分的声明部分,作用域在函数体内(在第7章会详细介绍)。
例3.2 整型变量的定义与使用
#include <stdio.h>
int main(void)
{
int a,b,c,d; //指定a,b,c,d为整型变量
unsigned u; //指定u为无符号整型变量
a = 12;
b = -24;
u = 10;
c = a + u;
d = b + u;
printf("a+u=%d,b+u=%d",c,d);
return 1;
}
a+u=22,b+u=-14
一个 int 型变量的最大允许值为 32767,如果再加 1,会出现什么情况?
例3.3 整型数据的溢出
#include <stdio.h>
int main(void)
{
int a,b;
a = 32767;
b = a + 1;
printf("a=%d,b=%d",a,b);
return 1;
}
a=32767,b=-32768
注意:一般我们测试的编译系统是32位的,这样的话一个 int 是 4 字节,可以将例3.3程序中的 int 改成 short 就能运行出课本上的结果。
整型变量可分为 int、short int、long int 和 unsigned int、unsigned short、unsigned long 等类型。那么,在将一个整型常量赋值给上述几类别的整型变量时如何做到类型匹配?
如 12345u,在内存中按 unsigned int 型存储。
如 -12345u,则先将其转换成补码53191,然后按无符号数存储。
本节完