C语言中 %d,%u 输出的数据范围

注:
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 于北京 晴

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值