C语言中signed和unsigned怎么理解?C语言unsigned long、long long 取值范围???

C语言中signed和unsigned

  • signed意思为有符号的,也就是第一个位代表正负,剩余的代表大小,例如:signed int 大小区间为-128-127
  • unsigned意思为无符号的,所有的位都为大小,没有负数,例如:unsigned int 大小区间为:0-255

signed类型的整数,只用了去除最高位,剩下的15位来进行编码的,而最高位只是用来做标记(sign),标记整数的正负,0表示正,1表示负。所以对于signed的整数,的存储范围是(-2^15 to 2^15-1),也就是 -32768 到 +32767的整数。
unsigned的整数,其16位全部用来编码,存储范围便是(0 to 2^16-1),即 0到 65535 的非负整数。所以呢 你可以声明 int a = 1,或者 int a = -1, 但是不可以声明 unsigned a = -1 。但是需要提到的一点是,不管整数的类型是signed 还是 unsigned,都用了16位来存储,也就是说16位全部用来存储数据

那其实很多人对longlong longunsigned long 的取值范围有疑惑,我也有,所以查阅解惑
int (long)

  • 4字节8位可表达位数:2^32=42 9496 7296

  • 范围:-21 4748 3648 ~ 21 4748 3647 (21*10^8)

unsigned int (unsigned long)

  • 4字节8位可表达位数:2^32=42 9496 7296

  • 范围:0 ~ 42 9496 7295 (42*10^8)

long long (__int64)

  • 8字节8位可表达位数:2^64=1844 6744 0737 0960 0000

  • 范围:-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807 (922*10^16)

unsigned long (unsigned __int64)

  • 8字节8位可表达位数:2^64=1844 6744 0737 0960 0000

  • 范围:0 ~ 1844 6744 0737 0955 1615 (1844*10^16)

类型名称字节数取值范围
signed char1-128~+127
short int2-32768~+32767
int4-2147483648~+2147483647
long int4-2147483648~+2141483647
long long long int8-9223372036854775808~+9223372036854775807

本文部分转载于两篇文章,做了微微整合
原文链接:https://blog.youkuaiyun.com/qq_40421919/article/details/83213527
https://www.cnblogs.com/lyxcode/p/9449466.html

<think>好的,用户想了解C语言int、char、double、short、long这些基本数据类型的作用。首先,我需要回顾一下C语言的基本数据类型,确保自己记得正确。根据引用[1],C语言有六个基本数据类型:short、intlong、char、float、double。用户提到的这些类型都在其中。 接下来,我应该逐一解释每个数据类型的作用。比如,int通常用于整数,char用于字符,double用于双精度浮点数,shortlong则是int的变体,用于不同范围的整数。要注意的是,这些类型在内存中的大小可能因平台而异,但标准规定了它们的最小范围,比如int至少是16位,long至少32位等。这点可能需要提到,但用户可能更关注作用而不是具体位数。 然后,用户的问题可能涉及到这些类型的使用场景。例如,char不仅存储字符,也可以处理小整数;short用于节省内存;double提供更高精度的浮点运算等。同时,根据引用[3],隐式类型转换规则也很重要,比如charshort在运算时会被提升为int,这可能会影响程序的行为,需要适当说明。 此外,signedunsigned的修饰符也很关键,引用[2]提到C语言使用这些关键字来修饰整型,这会影响数值范围用途。例如,unsigned char可以表示0到255,而signed char是-128到127。这可能也是用户需要了解的一部分,但用户的问题中没有明确提到,是否需要包含呢?可能作为扩展信息,但先专注回答基本作用。 需要确保回答结构清晰,分点解释每个类型的作用,并结合实际例子。例如,用char存储字符,用int做循环计数器,用double处理科学计算等。同时,可能需要提到内存占用,比如short比int省内存,适合大量数据存储。 还要注意用户可能存在的深层需求,比如为什么需要这么多类型,或者如何选择合适的数据类型。因此,在回答中可以简要说明选择数据类型的考虑因素,如数值范围、内存效率精度需求。 最后,根据系统指令,生成相关问题,比如隐式转换规则、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]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值