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》

<think>好的,用户想了解C语言int、char、double、shortlong这些基本数据类型的作用。首先,我需要回顾一下C语言基本数据类型,确保自己记得正确。根据引用[1],C语言有六个基本数据类型shortintlong、char、float、double。用户提到的这些类型都在其中。 接下来,我应该逐一解释每个数据类型的作用。比如,int通常用于整数,char用于字符,double用于双精度浮点数,shortlong则是int的变体,用于不同范围的整数。要注意的是,这些类型在内存中的大小可能因平台而异,但标准规定了它们的最小范围,比如int至少是16位,long至少32位等。这点可能需要提到,但用户可能更关注作用而不是具体位数。 然后,用户的问题可能涉及到这些类型的使用场景。例如,char不仅存储字符,也可以处理小整数;short用于节省内存;double提供更高精度的浮点运算等。同时,根据引用[3],隐式类型转换规则也很重要,比如char和short在运算时会被提升为int,这可能会影响程序的行为,需要适当说明。 此外,signedunsigned的修饰符也很关键,引用[2]提到C语言使用这些关键字来修饰整型,这会影响数值范围和用途。例如,unsigned char可以表示0到255,而signed char是-128到127。这可能也是用户需要了解的一部分,但用户的问题中没有明确提到,是否需要包含呢?可能作为扩展信息,但先专注回答基本作用。 需要确保回答结构清晰,分点解释每个类型的作用,并结合实际例子。例如,用char存储字符,用int做循环计数器,用double处理科学计算等。同时,可能需要提到内存占用,比如shortint省内存,适合大量数据存储。 还要注意用户可能存在的深层需求,比如为什么需要这么多类型,或者如何选择合适的数据类型。因此,在回答中可以简要说明选择数据类型的考虑因素,如数值范围、内存效率和精度需求。 最后,根据系统指令,生成相关问题,比如隐式转换规则、signedunsigned的区别,或者具体类型的取值范围。这些问题应该与主题紧密相关,帮助用户进一步学习。 现在需要检查是否有遗漏,比如float是否要提及,但用户的问题中没有提到float,所以可能集中在提到的几个类型。确保每个数据类型的作用解释清楚,并引用相关参考资料,比如引用[1]和引用[3]。同时,注意LaTeX格式的正确使用,比如变量用$...$包裹,独立公式用$$...$$,但在这个回答中可能公式较少,主要涉及类型名称,可能不需要太多数学表达式,但需要确保符合格式要求。 总结,回答的结构应该是先概述,再分点详细说明每个类型的作用,最后给出相关问题和引用标注。需要保持语言简洁,用中文,避免技术术语过于复杂,适合不同层次的理解。</think>C语言中的基本数据类型用于定义变量的存储格式和取值范围,是程序设计的基石。以下是各类型的具体作用及使用场景: ### 1. **`int`(整型)** - **作用**:存储整数,范围通常为$-2^{31}$到$2^{31}-1$(32位系统),满足大多数整数运算需求。 - **场景**:循环计数器、数学运算结果等。例如: ```c int count = 100; // 表示一个整数值 ``` ### 2. **`char`(字符型)** - **作用**:存储单个字符(ASCII码),或作为1字节整数(范围$-128$到$127$或$0$到$255$,取决于是否使用`signed`修饰)[^2]。 - **场景**:文本处理、小型整数存储。例如: ```c char letter = 'A'; // 存储字符'A',实际值为65(ASCII) ``` ### 3. **`double`(双精度浮点型)** - **作用**:存储高精度浮点数,范围约为$\pm 1.7 \times 10^{308}$,精度约15位小数。 - **场景**:科学计算、金融领域的高精度需求。例如: ```c double pi = 3.141592653589793; ``` ### 4. **`short`(短整型)** - **作用**:存储较小范围的整数(通常$-32768$到$32767$),占内存比`int`少(通常2字节)。 - **场景**:节省内存空间,如存储大量小型整数(传感器数据)。例如: ```c short temperature = -30; ``` ### 5. **`long`(长整型)** - **作用**:存储更大范围的整数(至少$-2^{31}$到$2^{31}-1$,可能扩展到64位)。 - **场景**:时间戳、大文件尺寸等需要大整数的场景。例如: ```c long population = 8000000000L; ``` --- ### 类型选择原则 - **数值范围**:如`short`用于小值,`long`用于大值。 - **内存效率**:`short`节省内存,`double`占用更多(通常8字节)。 - **隐式类型转换**:`char`和`short`在运算中会自动提升为`int`[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值