知识点一:整型数据类型
整型数据类型 | 缺省型 | 名称 |
[signed]int | int | 整型 |
unsigned int | unsigned int | 无符号整型 |
[signed]short[int] | short | 短整型 |
unsigned short[int] | unsigned short | 无符号短整型 |
[signed]long[int] | long | 长整型 |
unsigned long[int] | unsigned long | 无符号长整型 |
以上分类中的表现形式带符号整型可表示正、负整数,无符号的整型只能表示正整数,如unsigned int的取值范围位0~2*32-1。
知识点二:整型常量
在c语言中,整型常量采用3种形式进行表示:
1)十进制整数,如1024,由0~9构成;
2)以0开头的八进制整数,如0123,由0~7构成,它等于十进制数83;
3)以0x开头的十六进制整数,如0x12E2,由0~9,A~F构成;
知识点三:整型变量
由于在C语言中会为一个整型变量在内存中分配一定长度的储存单元,而储存单元中的位只接受0或1,因此,这个整型变量的数据便以二进制形式进行存放。
这里一个存储单元等于一个字节,一个字节等于8位。
00000000=0,00000001=1,00000010=2......11111111=255
知识点四:整型数据的存放
在C语言中,数值是以补码的形式表示的,那么,这里又涉及到正整数的补码和负整数的补码,无符号短整型不能表示负数,并且在C语言中以原码的形式进行表示的。
原码; 000000000000000=0 111111111111111=2*16-1,即0~65535。
补码:0 =+0~+32767(2*15-1)正数32768个。
1 =-1~-32768(-2*15)负数32768个。
a:正整数的补码就是该数的二进制形式,即补码=原码;
如征信数占2个存储单元,求10的补码:
1)10的二进制形式位1010;
2)10的补码=1010(前面12个0通常省略不写);
b:负整数的补码;
1)数据的绝对值表示为二进制形式;
2)最高位符号位为1,表示负数(0表示整数);
3)除符号位外的数值取反加1;
例:求-5的补码;
1)5的二进制=101,5的原码0000000000000101;
2)因为是负数,所以最高位符号为1,所以为1000000000000101;
3)按位取反得111111111111010;
4)加1得1111111111111011;
知识点五:整型数据占内存的大小
C标准没有具体规定各种类型数据所占用存储单元的长度,只要求sizeof(short)<=sizeof(int)<=sizeof(long),具体由各编译系统自行决定。
sizeof是测量类型或变量长度的运算符,可以采用sizeof()函数赖确定自己使用的计算计为数据分配多少字节数,例如下列代码:
#include<stdio.h>
int main()
{
printf("%d,sizeof(int));
printf("%d,sizeof(short));
printf("%d,sizeof(long));
return 0;
}
知识点六:整型变量的定义
C语言严格遵循强制类型先定义后使用。通过类型定义符,可以定义一个整数类型的变量,定义方法如下:
【类型定义符】标识符; 如int num;
在内存中使用4个字节的空间来保存整数数据,这个空间使用名称num来标识。
知识点点七:整型数据的溢出
1) 只有整型(包括字符型)数据可以加signed或unsigned修饰符,实型数据不能加;
2)对无符号整型数据用”%u”格式输出。%u表示用无符号十进制数的格式输出。如:
unsigned short price=50; //定义price为无符号短整型变量
printf("%u\n",price); //指定用无符号十进制数的格式输出
3)对于一个有符号类型的数据,由于其所能表示的数据范围已经界定,如果继续对其进行如“加”的操作便超出了界线,C语言称之为数据溢出,虽然数据溢出不会报错,但不会得到预期结果,例:
#include<stdio.h>
int main()
{
int i=32767;
printf("%d",i+1);
return 0;
}
结果:-32768,而不是32767
4)在指定一个变量定义为无符号整型后,不应向它赋予一个负值,否则会得到错误的结果;如:
unsigned short price=-1; \\不能吧一个负整数存储在无符号变量中
printf("%d\n",price);
结果:65535,而不是-1