C/C++不同整数类型的区别
在C/C++中涉及的整数相关的类型大致有如下几种:
- char、unsigned char
- short、unsigned short
- int、unsigned int
- long、unsigned long
- long long、unsigned long long
- int8_t、uint8_t
- int32_t、uint32_t
- int64_t、uint64_t
- DWORD
- DWORD32、DWORD64
- size_t、ssize_t
- SIZE_T、SSIZE_T
一、原生数据类型
以下数据类型C/C++语言中的原生整数类型,其长度取决于所使用的计算机系统和编译器:
- short、unsigned short
- int、unsigned int
- long、unsigned long
- long long、unsigned long long
如果需要开发跨平台的、具有良好可移植性的程序,请不要使用这些数据类型。通常情况下,这些数据类型所占字节数如下表所示:
| 数据类型 | 字节数 | 范围 |
|---|---|---|
| char | 1 | -128 ~ 127 |
| unsigned char | 1 | 0 ~ 255 |
| short | 2 | -32,768 ~ 32,767 |
| unsigned short | 2 | 0 ~ 65,535 |
| int | 4 | -2,147,483,648 ~ 2,147,483,647 |
| unsigned int | 0 | 0 ~ 4,294,967,295 |
| long | 4 | -2,147,483,648 ~ 2,147,483,647 |
| unsigned long | 4 | 0 ~ 4,294,967,295 |
| long long | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
| unsigned long long | 8 | 0 ~ 18,446,744,073,709,551,615 |
二、int*_t数据类型
int*_t格式的数据类型是使用typedef重新定义的数据类型。通过在不同的编译环境进行重定义,确保其所占用的字节数始终相同(即数据范围也相同)。
| 数据类型 | 字节数 | 范围 |
|---|---|---|
| int8_t | 1 | -128 ~ 127 |
| uint8_t | 1 | 0 ~ 255 |
| int32_t | 4 | -2,147,483,648 ~ 2,147,483,647 |
| uint32_t | 4 | 0 ~ 4,294,967,295 |
| int64_t | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
| uint64_t | 8 | 0 ~ 18,446,744,073,709,551,615 |
三、size_t和std::size_t
size_t和std::size_t是不同的数据类型,size_t是定义在C语言的头文件,而std::size_t定义在C++标准库的<cstddef>头文件中。
虽然二者是不同的数据类型,但std::size_t在实现上兼容size_t了,二者所占的字节数始终相同。
size_t和std::size_t都是无符号整型,它们在32位编译环境占用4字节,64位编译环境占8字节。
如果需要使用有符号的size_t类型,在Linux上可以使用ssize_t类型,Windows上可以使用SSIZE_T类型。
四、DWORD和DWORD32、DWORD64
DWORD是32位无符号整型(范围0 ~ 4,294,967,295)
DWORD32是32位无符号整型(范围0 ~ 4,294,967,295),DWORD64是64位无符号整型(范围0 ~ 18,446,744,073,709,551,615)。
而DWORD也是32位无符号整型(范围0 ~ 4,294,967,295),可能微软在设计之初是打算让DWORD在不同的编译环境具有不同的位数,但从目前情况来看,这种希望已然破灭,DWORD将永远是32位的无符号整型。
五、一点点建议
为了保证程序的可移植性,请在开发中只使用固定字节数的数据类型,如int8_t、int32_t、int64_t。
更多的文章参考:https://jiangxueqiao.com/
相关文章:
C/C++不同整数类型的区别
在C/C中涉及的整数相关的类型大致有如下几种: char、unsigned charshort、unsigned shortint、unsigned intlong、unsigned longlong long、unsigned long longint8_t、uint8_tint32_t、uint32_tint64_t、uint64_tDWORDDWORD32、DWORD64size_t、ssize_tSIZE_T、SSI…...
如何理解JDK、JRE、JVM区别与联系
摘要:JDK是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。 一、JDK JDK(Ja…...
用友GRP-U8 SmartUpload01 文件上传漏洞
漏洞描述 用友GRP-U8行政事业内控管理软件是一款专门针对行政事业单位开发的内部控制管理系统,旨在提高内部控制的效率和准确性。该软件/u8qx/SmartUpload01.jsp接口存在文件上传漏洞,未经授权的攻击者可通过此漏洞上传恶意后门文件,从而获取…...
react 路由v6
这里是区别:V5 vs V6 这里是官网:可以查看更多高级属性 一、基本使用: 1、配置文件 src/routes/index import React from "react";const Home React.lazy(() > import("../Pages/Home")); const About React.laz…...
rpc【通义】rpc原理【gpt】
一 rpc RPC(Remote Procedure Call,远程过程调用)是一种编程技术,它允许在分布式系统中的一个程序像调用本地函数一样调用另一个程序(位于不同的机器或进程中)的函数或方法。RPC的主要目标是隐藏网络通信的…...
Leetcode 2973. Find Number of Coins to Place in Tree Nodes
Leetcode 2973. Find Number of Coins to Place in Tree Nodes 1. 解题思路2. 代码实现 题目链接:2973. Find Number of Coins to Place in Tree Nodes 1. 解题思路 这道题思路上其实挺简单的,就是一个遍历的思路,找到每一个点对应的子树当…...
如何调动销售人员使用CRM的积极性?
CRM系统在销售人员眼中是流程监管工具也是单调枯燥的操作空间,如何让销售爱上CRM系统?1.让CRM简化销售工作;2.智能提醒销售各项事务;3.让CRM界面更加丰富多彩,通过这些方法帮助销售经理轻松管理团队,销售对…...
数值分析期末复习
第一章 科学计算 误差 解题步骤 x : 真实值 x:真实值 x:真实值 x ∗ : 近似值 x^*:近似值 x∗:近似值 先求绝对误差 e ∗ e^* e∗: x − x ∗ x - x^* x−x∗ 绝对误差限是 ∣ x − x ∗ ∣ ≤ ε |x - x^{*}| \le \varepsilon ∣x−x∗∣≤ε 求相对误差限: ∣ x − x ∗…...
k8s的探针
一、探针原理 分布式系统和微服务体系结构的挑战之一是自动检测不正常的应用程序,并将请求(request)重新路由到其他可用系统,恢复损坏的组件。健康检查是应对该挑战的一种可靠方法。使用 Kubernetes,可以通过探针配置运…...
Python 爬虫之下载视频(五)
爬取第三方网站视频 文章目录 爬取第三方网站视频前言一、基本情况二、基本思路三、代码编写四、注意事项(ffmpeg)总结 前言 国内主流的视频平台有点难。。。就暂且记录一些三方视频平台的爬取吧。比如下面这个: 一、基本情况 这次爬取的方…...
Gradle下载地址
Gradle下载地址 Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,Gradle也是第一个构建集成工具,与ant、maven、ivy有良好的相容相关性。支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库…...
顺序表的实现(头插、尾插、头删、尾删、查找、删除、插入)
目录 一. 数据结构相关概念 二、线性表 三、顺序表概念及结构 3.1顺序表一般可以分为: 3.2 接口实现: 四、基本操作实现 4.1顺序表初始化 4.2检查空间,如果满了,进行增容编辑 4.3顺序表打印 4.4顺序表销毁 4.5顺…...
VMware虚拟机安装Ubuntu系统教程
所使用的文件如下: VMware Workstation 17 Pro ubuntu-22.04.3-desktop-amd64.iso 一、ubuntu 命名规则及各版本一览表 1.ubuntu 命名规则: 例如:ubuntu 16.04 LTS 是长期维护版本;ubuntu 17.04 是新特性版本 前两位数字为发…...
41 sysfs 文件系统
前言 在 linux 中常见的文件系统 有很多, 如下 基于磁盘的文件系统, ext2, ext3, ext4, xfs, btrfs, jfs, ntfs 内存文件系统, procfs, sysfs, tmpfs, squashfs, debugfs 闪存文件系统, ubifs, jffs2, yaffs 文件系统这一套体系在 linux 有一层 vfs 抽象, 用户程序不用…...
C++面试宝典第9题:找出第K大元素
题目 给定一个整数数组a,同时给定它的大小N和要找的K(1 <= K <= N),请根据快速排序的思路,找出数组中第K大的数(保证答案存在)。比如:数组a为[50, 23, 66, 18, 72],数组大小N为5,K为3,则第K大的数为50。 解析 这道题主要考察应聘者对于快速排序的理解,以及实…...
“马屁精”李白
“李白一斗诗百篇,长安市上酒家眠。天子呼来不上船,自称臣是酒中仙。”这是诗圣杜甫笔下的李白,也是我们脑海里坚信无二的李白。恃才傲物又狂放不羁的诗仙,怎么会低眉顺眼地去拍人马屁呢? 但我要说的是,人…...
python之glob的用法
目录 获取特定扩展名的所有文件 获取特定目录下的所有文件 递归获取所有文件 转义特殊字符 iglob glob 是 Python 中用于文件模式匹配的一个模块。它使用 Unix shell-style 的通配符来进行匹配,并返回所有匹配的文件路径列表。 下面是一些 glob 的基本用法&am…...
【adb】电脑通过ADB向手机传输文件
具体步骤如下: Step1 下载ADB工具 下载最新版本的 ADB工具 !!! 注意:一定要是最新版本的ADB,否则很可能导致无法识别到手机。 将下载的ADB解压以后的文件如下图所示: Step2 添加环境变量 将 ADB的路径 D:\platformtools &…...
npm的常用使用技巧
npm是一个强大的工具,可以帮助你管理Node.js项目中的依赖项。以下是一些有用的npm使用技巧: 使用npm install命令:这个命令可以安装项目的依赖项。如果你想安装一个特定的版本,你可以使用npm install <package><version…...
【网络奇遇记】揭秘计算机网络的性能指标:速率|带宽|吞吐量|时延
🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 速率1.1 数据量1.2 速率 二. 带宽三. 吞吐量四. 时延4.1 发送时延4.2 传播时延…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
