C语言中的整数类型(short,int,long和long long)

整数是编程中最常见的一种数据类型,C语言提供了多种整数类型,包括 shortintlong 和 long long,它们的主要区别在于存储范围和内存占用的大小。

本节将详细讲解这些整数类型的定义、特性、使用场景以及注意事项,帮助你全面理解它们在 C语言中的作用。

C语言整数类型(short,int,long,long long)详解 https://xiecoding.cn/view/416.html

C语言中的整数类型

C语言的整数类型用于存储整数值,可以是有符号的(signed,默认情况,包含正数、负数和零)或无符号的(unsigned,仅包含非负数)。每种类型的大小(以字节为单位)和取值范围由 C标准和具体实现(编译器、硬件平台)共同决定。

以下罗列了四种主要的 C 语言整数类型:

  • short:短整型,通常用于节省内存。
  • int:标准整型,是最常用的整数类型。
  • long:长整型,适用于需要更大范围的场景。
  • long long:超长整型,提供最大的整数范围(C99 引入)。

这些类型可以通过 signed 或 unsigned 修饰符调整,默认情况下是 signed。接下来,我们将逐一深入探讨。

C语言short(短整型)

short 是一种较小的整数类型,通常占用 2 字节(16 位)。它的设计初衷是节省内存,适用于数据范围较小的场景。

取值范围
  • signed short:-32,768 到 32,767(-215 到 215-1)
  • unsigned short:0 到 65,535(0 到 216-1)
实例
#include <stdio.h>int main(void) {short a = 30000;unsigned short b = 60000;printf("Signed short: %hd\n", a);printf("Unsigned short: %hu\n", b);return 0;
}

输出结果:

Signed short: 30000
Unsigned short: 60000

注意,在格式化输出时,short 使用 %hd(有符号)或 %hu(无符号)。

C语言int(标准整型)

int 是 C语言中最常用的整数类型,其大小通常与处理器的字长一致(如 32 位系统上是 4 字节,64 位系统上可能是 4 或 8 字节)。它是默认的整数类型,适合大多数通用场景。

取值范围(假设 4 字节)
  • signed int:-2,147,483,648 到 2,147,483,647(-231 到 231-1)
  • unsigned int:0 到 4,294,967,295(0 到 232-1)
实例
#include <stdio.h>int main(void) {int x = -1000000;unsigned int y = 4000000000U; // U 表示无符号常量printf("Signed int: %d\n", x);printf("Unsigned int: %u\n", y);return 0;
}

输出结果:

Signed int: -1000000
Unsigned int: 4000000000

注意:无符号整数需要加后缀 U,否则可能触发编译器警告。输出时使用 %d(有符号)或 %u(无符号)。

C语言long(长整型)

long 提供比 int 更大的范围,至少占用 4 字节,在某些 64 位系统上可能是 8 字节。它的具体大小因平台而异,因此在跨平台编程时需谨慎。

取值范围(假设 4 字节):
  • signed long:-2,147,483,648 到 2,147,483,647
  • unsigned long:0 到 4,294,967,295

若为 8 字节,则范围扩展到 ±263 和 0 到 264-1。

实例
#include <stdio.h>int main(void) {long a = 1234567890L; // L 表示 long 常量unsigned long b = 4000000000UL;printf("Signed long: %ld\n", a);printf("Unsigned long: %lu\n", b);return 0;
}

输出结果:

Signed long: 1234567890
Unsigned long: 4000000000

注意,long 类型的整数常量后加 L 或 UL,输出使用 %ld(有符号)或 %lu(无符号)。

C语言long long(超长整型)

long long 是 C99 引入的类型,至少占用 8 字节(64 位),用于需要极大数据范围的场景,如科学计算或大文件处理。

取值范围
  • signed long long:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(-263 到 263-1)
  • unsigned long long:0 到 18,446,744,073,709,551,615(0 到 264-1)
实例
#include <stdio.h>int main(void) {long long a = -9223372036854775807LL; // LL 表示 long long 常量unsigned long long b = 18000000000000000000ULL;printf("Signed long long: %lld\n", a);printf("Unsigned long long: %llu\n", b);return 0;
}

输出结果:

Signed long long: -9223372036854775807
Unsigned long long: 18000000000000000000

注意,long long 类型的整数常量使用 LL 或 ULL 后缀,输出用 %lld(有符号)或 %llu(无符号)。

类型大小与平台的依赖性

整数类型的大小并非完全固定,C 标准只规定了最小范围和相对关系:short ≤ int ≤ long ≤ long long。实际大小取决于编译器和硬件。例如:

类型32 位系统(字节)64 位系统(字节)
short22
int44(有时 8)
long44 或者 8
long long88

你可以使用 sizeof 操作符检查具体大小

printf("Size of int: %zu bytes\n", sizeof(int));

使用场景与注意事项

  • 选择合适的类型:根据数据范围选择类型,避免浪费内存或溢出。例如,小计数器用 short,大文件偏移量用 long long
  • 溢出风险:超出范围会导致未定义行为。例如,short 从 32,767 加 1 可能变成 -32,768。
  • 跨平台兼容性:使用 <stdint.h> 定义的固定宽度类型(如 int32_t)代替直接使用 int 或 long,以确保一致性。

总结

C语言的整数类型 shortintlong 和 long long 提供了从 16 位到 64 位的灵活选择。通过理解它们的范围、内存占用和使用场景,你可以在编程中做出更优决策。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用jcodec库,访问网络视频提取封面图片上传至oss

注释部分为FFmpeg&#xff08;确实方便但依赖太大&#xff0c;不想用&#xff09; package com.zuodou.upload;import com.aliyun.oss.OSS; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectRequest; import com.zuodou.oss.OssProperties;…

游戏引擎学习第147天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上一集回顾 具体来说&#xff0c;我们通过隐式计算来解决问题&#xff0c;而不是像数字微分分析器那样逐步增加数据。我们已经涵盖了这个部分&#xff0c;并计划继续处理音量问题。不过&#xff0c;实际上我们现在不需要继续处理…

使用Dockerfile打包java项目生成镜像部署到Linux_java项目打docker镜像的dockerfile

比起容器、镜像来说&#xff0c;Dockerfile 非常普通&#xff0c;它就是一个纯文本&#xff0c;里面记录了一系列的构建指令&#xff0c;比如选择基础镜像、拷贝文件、运行脚本等等&#xff0c;每个指令都会生成一个 Layer&#xff0c;而 Docker 顺序执行这个文件里的所有步骤&…

Linux -- 磁盘结构、文件系统ext2

一、磁盘 1.磁盘的物理结构 2.磁盘的存储结构 盘片&#xff1a;是机械硬盘存储数据的主要介质&#xff0c;一般由铝合金或玻璃等材料制成&#xff0c;表面涂有一层磁性材料。数据通过磁头在盘片的磁性涂层上进行磁化来记录&#xff0c;磁化的不同方向代表二进制的 0 和 1。盘面…

标量、向量、矩阵与张量:从维度理解数据结构的层次

在数学和计算机科学中,维度描述了数据结构的复杂性,而标量、向量、矩阵、张量则是不同维度的数据表示形式。它们的关系可以理解为从简单到复杂的扩展,以下是详细解析: 1. 标量(Scalar):0维数据 定义:单个数值,没有方向,只有大小。 维度:0维(无索引)。 示例: 温度…

点云数据处理--splat转3dtiles

文章目录 处理流程简介核心功能实现数据读取与格式转换定义Point类数据读取splat转gltf 点云数据分割定义四叉树递归生成3dtiles瓦片 生成tileset.json递归生成tileset.json计算box 主函数调用渲染 下一步工作性能优化渲染效果调优其他 源码地址&#xff1a; github 处理流程简…

OneM2M:全球性的物联网标准-可应用于物联网中

OneM2M 是一个全球性的物联网(IoT)标准,旨在为物联网设备和服务提供统一的框架和接口,以实现设备之间的互操作性、数据共享和服务集成。OneM2M 由多个国际标准化组织(如 ETSI、TIA、TTC、ARIB 等)共同制定,目标是解决物联网领域的碎片化问题,提供一个通用的标准,支持跨…

【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,

欢迎来到ZyyOvO的博客✨&#xff0c;一个关于探索技术的角落&#xff0c;记录学习的点滴&#x1f4d6;&#xff0c;分享实用的技巧&#x1f6e0;️&#xff0c;偶尔还有一些奇思妙想&#x1f4a1; 本文由ZyyOvO原创✍️&#xff0c;感谢支持❤️&#xff01;请尊重原创&#x1…

Java爬虫获取淘宝商品详情数据的完整指南

在电商领域&#xff0c;获取商品详情数据对于市场分析、价格监控、用户体验优化等场景具有重要意义。淘宝作为国内领先的电商平台&#xff0c;提供了丰富的API接口供开发者使用&#xff0c;其中item_get和item_get_pro接口可以用来获取商品的详细信息。本文将详细介绍如何使用J…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数

nei声明在 src/core/ngx_cycle.h ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle);实现在 src/core/ngx_cycle.c ngx_cycle_t * ngx_init_cycle(ngx_cycle_t *old_cycle) {void *rv;char **senv;ngx_uint_t i, n;ngx_log_t …

qt 操作多个sqlite文件

qt 操作多个sqlite文件 Chapter1 qt 操作多个sqlite文件1. 引入必要的头文件2. 创建并连接多个SQLite数据库3. 代码说明4. 注意事项 Chapter2 qt 多线程操作sqlite多文件1. 引入必要的头文件2. 创建数据库操作的工作线程类3. 在主线程中创建并启动多个工作线程4. 代码说明5. 运…

最新版本WebContext构造函数-避坑

import org.thymeleaf.context.IWebContext; import org.thymeleaf.context.WebContext; 当你想把页面信息全部获取出来存到redis缓存中使用时&#xff0c;SpringWebContext在Spring5中报错 SpringWebContext ctx new SpringWebContext(request, response,request.getServlet…

用Python分割并高效处理PDF大文件

在处理大型PDF文件时&#xff0c;将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区&#xff0c;它可以提高处理效率&#xff0c;并使分析或操作文档变得更容易。在本文中&#xff0c;我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…

neo4j随笔-将csv文件导入知识图谱

目录 导入前的准备 导入csv文件 导入nodes1.1.csv并动态为节点添加标签 ​编辑导入relations1.1.csv并动态为关系添加标签 结果 导入前的准备 我有两个csv文件 nodes1.1.csv存放节点信息,用记事本打开&#xff0c;能正常显示&#xff0c;且编码为UTF-8&#xff0c;就可以…

cpu 多级缓存L1、L2、L3 与主存关系

现代 CPU 的多级缓存&#xff08;L1、L2、L3&#xff09;和主存&#xff08;DRAM&#xff09;构成了一个层次化的内存系统&#xff0c;旨在通过减少内存访问延迟和提高数据访问速度来优化计算性能。以下是对多级缓存和主存的详细解析&#xff1a; 1. 缓存层次结构 现代 CPU 通…

C++:入门详解(关于C与C++基本差别)

目录 一.C的第一个程序 二.命名空间&#xff08;namespace&#xff09; 1.命名空间的定义与使用&#xff1a; &#xff08;1&#xff09;命名空间里可以定义变量&#xff0c;函数&#xff0c;结构体等多种类型 &#xff08;2&#xff09;命名空间调用&#xff08;&#xf…

Python的学习篇(七)--网页结构

七、网页&#xff08;HTML&#xff09;结构 7.1 HTML介绍 HTML(Hyper Text Markup Language)&#xff0c;超文本标记语言。 超文本&#xff1a;比文本的功能要强大&#xff0c;通过链接和交互式的方式来组织与呈现信息的文本形式。不仅仅有文本&#xff0c;还可以包含图片、…

*VulnHub-FristiLeaks:1.3暴力解法、细节解法,主打软硬都吃,隧道搭建、寻找exp、提权、只要你想没有做不到的姿势

*VulnHub-FristiLeaks:1.3暴力解法、细节解法&#xff0c;主打软硬都吃&#xff0c;隧道搭建、寻找exp、提权、只要你想没有做不到的姿势 一、信息收集 1、扫靶机ip 经典第一步&#xff0c;扫一下靶机ip arp-scan -l 扫描同网段 nmap -sP 192.168.122.0/242、指纹扫描、端口…

PHP:格式化JSON为PHP语法格式

1. 原生函数 $arr [1,2,3,4]; $str var_export($a,true); var_dump($str); 2. 自定义方法 class Export{private static $space;private static function do($a, string $prev){$res ;$next $prev . self::$space;if (is_array($a)) {$res . [;foreach ($a as $k > $…

【Python 数据结构 9.树】

我装作漠视一切&#xff0c;其实我在乎的太多&#xff0c;但我知道抓得越紧越容易失去 —— 25.3.6 一、树的基本概念 1.树的定义 树是n个结点的有限集合&#xff0c;n0时为空树。当n大于0的时候&#xff0c;满足如下两个条件&#xff1a; ① 有且仅有一个特定的结点&#xff…