Pwn

C语言整数类型

Posted on 2020-01-02,3 min read
short int
#占用空间比int小,用于较小数值的场合,节省空间,有符号类型
long int
#占用空间比int大,用于较大数值的场合,存储空间比int多,有符号类型
long long int
#占用储存空间比long多,适用于更大数值的场合,至少64位,有符号类型
unsigned int
#无符号类型,只能用于非负数的场合,比如16位的unsigned int取值范围为0~65535,而有符号类型的数值,取值范围为-32768~32767
#个人理解如下(有错勿喷):
#0111111111111111开头的0是符号位,表示正负,转换为十进制为32767
#1111111111111111无符号类型,把本来的0符号位,当成数据直接运算,转换结果为65535,多一位数据位,自然就能存放更多的数据
signed
#强调使用有符号类型的意图

这些数据大小类型如下:
short int< int< long int<long long int

最常见的设置是long long 占64位,long占32位,short占16位,int 占16位32位

如果一个数超出了int类型的取值范围,且在long类型取值范围内,使用long类型,然而会减慢运行速度
如果在long和int占用空间相同的机器上编写代码,当需要32位整数时,应使用long int而不是int,方便把程序移植到16位机器后,仍然能正常运行

整数溢出:

#include <stdio.h>
int main(void){
	int i=2147483647;
	unsigned int j=4294967295;
	printf("%d %d %d\n",i,i+1,i+2);
	printf("%u %u %u\n",j,j+1,j+2);
	getchar();
	return 0;

}
返回结果:
2147483647 -2147483648 -2147483647
4294967295 0 1

当数值超过定义类型的最大值时,就会溢出,重新从起点开始
int类型的变量,为溢出时2147483647,溢出时为-2147483648,溢出第二个时,为-2147483647,数值越来越大
unsigned long类型的变量,未溢出时为4294967295,溢出时为0,再加1为1,因为unsigned是没有负数的,所以溢出时,会直接从0开始

下一篇: Node.js代码执行漏洞→