C语言基本数据类型int, short int, long int, long long int, unsigned int, signed int等解析

一. 普通int类型

int类型是有符号整型,即int类型的值必须是整数,可以是正整数,负整数,零
int类型取值范围因计算机系统而异。早起的16位IBM PC兼容机使用16位来存储一个int值,其取值范围是-32769 ~32768。目前个人计算机一般是32位,因此用32位存储一个int值。现在随着个人计算机产业的发展,个人计算机逐步迈向64位处理器发展,自然可以储存更大的整数。ISO C规定int的取值范围最小为-32769 ~32768。

1.1打印int值

我们知道可以使用printf()函数打印int类型的值,%d指明了在一行中打印整数的位置。
%d称为转换说明。

例1⃣️:

# include <stdio.h>
int main(void)
{
    int i = 10;
    int j = 3;
    printf("%d %d\n", i, j);
    return 0;
}

Output:

10 3

第一个输出控制符%d 对应的是第一个输出参数i,第二个输出控制符%d对应的是第二个输出参数j


例2⃣️:

# include <stdio.h>
int main(void)
{
    int i = 10;
    printf("%d\n", i);  
    return 0;
}

这句话的意思是将变量 i 以十进制输出

那么现在有一个问题:i 本身就是十进制,为什么还要将 i 以十进制输出呢

因为程序中虽然写的是 i=10,但是在内存中并不是将 10 这个十进制数存放进去,而是将 10 的二进制代码存放进去了。计算机只能执行二进制 0、1 代码,而 0、1 代码本身并没有什么实际的含义,它可以表示任何类型的数据。所以输出的时候要强调是以哪种进制形式输出。所以就必须要有“输出控制符”,以告诉操作系统应该怎样解读二进制数据。


例3⃣️:显示八进制和十六进制

#include <stdio.h>

int main(void)
{
    int x =100;
    
    printf("dec = %d, octal = %o, hex = %x\n",x,x,x);
    printf("dec = %d, octal = %#o, hex = %#x\n",x,x,x);

    return 0;
   
}

Output:

dec = 100, octal = 144, hex = 64
dec = 100, octal = 0144, hex = 0x64

以十进制显示数字,使用%d;以八进制显示数字,使用%o;以十六进制显示数字,使用%x。要显示各进制数的前缀0,0x,0X,必须分别使用%#o,%#x,%#X。

二. 其他整数类型

C语言还提供了3个关键字修饰基本整数类型:short,long,unsigned。

名称全称类型说明符缩写类型说明符位数范围
整型intint16位-32768至+32767
无符号整型unsigned intunsigned16位0 至 65,535
短整型short intshort16位-32768至+32767
无符号短整型unsigned short intunsigned short16位0 至 65,535
长整型long intlong32位-2,147,483,648 至 2,147,483,647
  • short int类型(简写为short):占用空间可能比int少,常用于较小数值以节省空间。
  • long int类型(简写为long):占用空间可能比int多,常用于较大数值。
  • long long int类型(简写为long long):占用空间可能比long多,常用于更大数值的场合。
  • unsigned int(简写为unsigned):只用于非负值的场合。
  • 在C90标准中,添加了unsigned long int(简写为unsigned long)和unsigned short int(简写为unsigned short)
  • 在C99标准中,又添加了unsigned long long int(简写为unsigned long long)

2.1使用多种整数类型原因

为什么说short类型“可能”比int类型占用空间少,long类型“可能”比int类型占用空间多?因为C语言只规定了short占用空间不能多于int,long占用空间不能少于int。这样规定是为了适应不同的机器。例如,过去的一台运行Windows3.x的机器上,int类型和short类型都占16位,long类型占32位。后来,Windows和Mac OS都用上了16位存储short类型,32位存储int类型和long类型。现在计算机普遍使用64位处理器,为了储存64位整数,才引入了long long int类型。(使用位数越多可以表示的整数数值越大)。
现在个人计算机上最常见的设置是,long long占64位,long占32位,short占16位,int占16位或32位。

2.2如何选择数据类型

int类型那么多,应该如何选择呢?

  1. 首先,考虑unsigned类型。这种类型常用于计数,因为计数不用负数,而且,unsigned可以表示更大的正数。
  2. 如果一个数超出了int类型的取值范围,且在long类型的取值范围内时,使用long类型。但是,对于那些long类型占用空间比int大的系统,使用long会减慢运算速度。因此,尽量不用long。
  3. 如果在long类型和int类型占用空间相同的机器上编写代码,当确实需要32位的整数时,应使用long而不是int,以便把程序移植到16位机器后仍然能正常工作。
  4. 如果确实需要64位的整数时,使用long long

2.3如何打印

  • 打印unsigned int类型的值,使用%u
  • 打印unsigned long类型的值,使用%lu
  • 打印long long类型的值,使用%lld和%llu分别表示有符号与无符号类型
  • 打印long类型,使用%ld(如果系统中int和long大小相同使用%d就可以)
  • %lx表示以十六进制(hexadecimal )格式打印long类型
  • %lo表示比八进制(octal)格式打印long类型
  • %hd表示以十进制(decimal)格式打印short类型
  • %ho表示以八进制(octal)格式打印short类型
  • %hu代表以 unsigned short格式输出整数
  • %hx 代表以16进制的 输出short类型的整数

scanf() 格式控制符汇总
在这里插入图片描述

《C primer plus》

  • 23
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值