注:
1、以下测试在xp sp3 32位系统,Codeblocks 17.12(GCC编译)和STM32F407上进行,其他平台未测试
2、本文只是我个人的理解,不一定完全正确
3、版权所有,转载请注明作者和出处
一、说明与结论
1、int即整型数据类型,这个类型占用的字节数和系统的位数有关,8位系统int占用1字节,16位系统int占用2字节,32位系统int占用4字节,64位系统int占用8字节。
2、数据类型有有符号和无符号之分,有符号类型最高位为1表示负数,0表示整数,能表示的最大值减半。
3、%d和%u
%d:输出一个有符号的整型数据,即它输出的数据范围是 signed int 的范围,即 0x80000000 ~ 0x7FFFFFFF
%u:输出一个无符号的整型数据,即它输出的数据范围是 unsigned int 的范围,即:0~0xFFFFFFFF
二、实例
1、测试代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=0x7fffffff;
int b=0x80000000;
int c=0xffffffff;
int d=0xffffffff+1;
unsigned int e=0xffffffff;
printf("%011d\n",a);
printf("%011d\n",b);
printf("%011d\n",c);
printf("%011d\n",d);
printf("%011u\n",e);
return 0;
}
2、codeblocks实例
3、IAR ARM实例
4、经验
1)一般情况下采用%d输出已经足够了,因为它的输出范围为:-2147483648~+2147483647已经非常大了,但是确实要输出超过0x7FFFFFFF的数据时就必须要用%u了,不然结果就会错误,所以绝大多数情况下用%d,特殊情况下用%u。
2)采用%d或%u编译完的代码大小不变
2020-03-21 于北京 晴