C/C++中的整型常识

C/C++ 整型提升(Integral Promotion) 先确认一个事实前提,我们知道C/C++中的char字符都有它对应的ASCII码(一般情况下0~127),那么对于一个char变量输出它的ASCII码则需要 int显示转换。 例如: 阅读详情

很多人对C/C++中的整型不太了解,导致代码移植的时候出现问题,本人在此总结一下:

a. C/C++对整型长度的规定是为了执行效率,将int定义为机器字长可以取得最大的执行速度;

b. C/C++中整型包括:int, char 和 enum, C++中还包含bool类型,C99中bool是一个宏,实际为_Bool;

c. C 和 C++ 对 enum 的规定有所不同,这里不描述;

d. 修饰整型正负的有 signed 和 unsigned,对于 int 默认为 signed;

e. 修饰 int 大小的有 short 和 long, 部分编译器还扩展了一些更长的整型,比如 long long 和 __int64, C99中增加了long long和unsigned long long;

f. int 的长度 与 机器字长相同, 16位的编译器上int长16位,32位的编译器上int长32位;

g. short int 的长度 小于等于 int 的长度,注意她们可能长度相等,这取决于编译器;

h. long int 的长度 大于等于 int 的长度,注意她们可能长度相等,这取决于编译器;

i. char 的长度应当可以包容得下一个字符,大部分系统中就是一个字节,而有的系统中可能是4个字节,因为这些系统中一个字符需要四个字节来描述;

j. char 的正负取决于编译器,而编译器的决定取决于操作系统,在不同的编译器中char可能等同于signed char,也可能等同于unsigned char;

总结:

a. 出于效率考虑,应该尽量使用int和unsigned int;

b. 当需要指定容量的整型时,不应该直接使用short、int、long等,因为在不同的编译器上她们的容量不相同。此时应该定义她们相应的宏或类型,比如在VC++6.0中,可以如下定义:

typedef unsigned char UBYTE;

typedef   signed char SBYTE;

typedef unsigned short int UWORD;

typedef   signed short int SWORD;

typedef unsigned int UDWORD;

typedef   signed int SDWORD;

typedef unsigned __int64 UQWORD;

typedef   signed __int64 SQWORD;

然后在代码中使用 UBYTE、SBYTE、UWORD 等,这样当代码移植的时候只需要修改相应的类型即可。

定义自己的类型虽然在代码移植的时候只需要修改一处即可,但仍然属于源代码级别的修改,所以 C++ 2.0 中将这些类型定义在模板中,可以做到代码移植时无需修改代码。

c. 在定义char时,一定要加上 signed 或 unsigned,因为她的正负在不同的编译器上并不相同。

d. 不要想当然的以为char是1字节长,因为她的长度在不同的编译器上并不相同

C/C++的64位整型 不同编译器间的比较  //为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数  //结果VC中还是认为是32位的,显然不合适  //typedef signed long int     TSint64;  //typedef unsigned long int   TUint64;    //ANSI C中规定long lon 阅读详情

相关推荐

DeepSeek Harness桌面版安装教程:从零配置到实用插件推荐

在AI编程工具逐步普及的今天,开发者越来越关注如何将大模型能力无缝融入日常编码流程。这类工具的核心在于构建一个连接模型服务与本地开发环境的中间层,通过项目级上下文理解、终端指令执行和插件机制,让AI真正成为能动手干活的编程副驾驶。安装配置过程中,环境准备、模型服务连接与工具权限设置是三个关键环节。完成基础搭建后,选择合适的插件能显著提升代码质量与问题排查效率,例如基于代码审查的规范对齐和安全扫描,以及面向运行时日志关联分析与性能告警的诊断工具。本文以DeepSeek Harness桌面版为例,从环境自查、安

weixin_31286719的博客 310

编译技术-除常数优化

​ 对于任何处理器,进行除法计算所需要的时间都远远高于乘法和移位运算(当然这两者也不在一个量级上),所以我们有一种想法,就是把除法转换成乘法和移位操作,也就是quotientdividenddivisordividend×multipliershiftquotientdivisordividend​dividend×multiplier>>shift。

living_frontier的博客 852

GD32重映射实战:从部分映射到完全映射的配置解析

本文深入解析GD32微控制器的重映射功能,以定时器1的PWM通道为例,详细阐述了从部分映射到完全映射的实战配置流程。文章重点介绍了AFIO模块的核心作用、配置寄存器操作以及关键的避坑指南,旨在帮助开发者灵活优化PCB布局并解决引脚资源冲突,从而高效利用芯片外设功能。

k6l7m8n9的博客 694

windows 常见 数据类型

类型 描述 对应的基本类型 备注 BOOL 布尔型变量 typedef int BOOL

qq_33782617的博客 1185

Vitis HLS 学习指南与实践教程

Vitis HLS 学习指南与实践教程摘要:本文系统介绍了AMD Vitis HLS工具及其应用。HLS技术将C/C++代码自动转换为硬件描述语言,显著提升FPGA开发效率(5-10倍)。文章对比了HLS与传统RTL设计的优势,包括抽象级别高、开发周期短、代码重用性强等特点。详细讲解了Vitis HLS工具链的核心功能,包括支持的C/C++特性(如任意精度数据类型)、开发流程(项目创建-代码编写-仿真-综合)以及关键优化技术(流水线、循环展开、数组分割等编译指示)。通过具体代码示例展示了HLS设计方法,为F

weixin_44707118的博客 1401

Deepseek+Word插件:一键搞定论文翻译与润色的学术写作新革命

本文介绍了Deepseek Word插件如何革新学术写作流程,实现论文翻译与润色的一键操作。该插件深度集成于Word环境,能智能完成中英互译、语法修正、术语统一及逻辑优化,显著提升写作效率与文本质量,是研究者的高效AI助手。

weixin_29252171的博客 511

C++中关于DWORD

转载自百度知道 https://zhidao.baidu.com/question/480478149.html C++中使用DWORD不用声明,但是要加头文件Windows.h。 具体描述如下: DWORD 就是 Double Word, 每个word为2个字节的长度,DWORD 双字即为4个字节,每个字节是8位,共32位。DWORD的宏定义如下:     #define DWORD u

海底小星星的博客 2万+

WIN10系统下VS2019编译CloudCompare2.12.4

CloudCompare2.12.4

点云侠的博客 3143

DWORD类型

DWORD 类型 typedef unsigned long DWORD; 1. 要使用DWORD要添加头文件<windows.h> 2. DWORD常用来保存地址或者存放指针 3.DWORD就是Double Word,一个word是2字节,double word就是4字节,也就是32bit的无符号整数。1B=8bit ...

@matery 5794

瑞芯微RK3588部署YOLOv8模型

写下这篇博客进行记录,以防后面忘了怎么部署。

weixin_45303602的博客 3656

halcon算子翻译——connection

算子:connection(Region : ConnectedRegions : : ) 功能:分离一个区域中相连接的部分(变成多个区域)。 输入参数: Region:输入一个区域; 输出参数: ConnectedRegions: ———————————————— 版权声明:本文为优快云博主「机器人自动化控制」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/haier123888/article/details/1

haier123888的博客 4828

C++计算数据的MD5值

本例演示使用MD5实验法计算数据“data”的MD5值并转为16进制字符串输出。 MD5Function.h #pragma once #include <iostream> typedef unsigned int int_32; typedef unsigned char md5byte; typedef int_32 UWORD32; struct MD5Context {//*MD5结构 UWORD32 buf[4]; UWORD32 bytes[2]; UWORD3

r5014的博客[Eosin_Sky] 1661

《FPGA接口与协议》专栏的说明与导航

《FPGA接口与协议》专栏的说明与导航(建议阅读)。

孤独的单刀 17万+

[转载3]C/C++中的整型常识

C/C++中的整型常识 很多人对C/C++中的整型不太了解,导致代码移植的时候出现问题,本人在此总结一下,若有描述错误,请务必指出,谢谢!a. C/C++对整型长度的规定是为了执行效率,将int定义为机器字长可以取得最大的执行速度;b. C/C++中整型包括:int, char 和 enum, C++中还包含bool类型,C99中bool是一个宏,实际为_Bool; c. C 和 C++ 对

sky911911的专栏 885

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C/C++的64位整型 zz

//为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数//结果VC中还是认为是32位的,显然不合适//typedef signed long int TSint64;//typedef unsigned long int TUint64;//ANSI C中规定long long才能表示64位//参见:http://msd

hi 2万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【C/C++】C/C++编程——整型(一)

C++ 中的整型是基本的数据类型之一,用于表示没有小数部分的数。这包括正整数、负整数以及零。C++ 提供了多种整型,以适应不同大小的数值需求和优化内存使用。

shopeeai的博客 1637

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C/C++的64位整型

<br />在C/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf(“%lld”,a),printf(“%I64d”,a),和cout << a三种方式。<br />本文讨论的是五种常用的C/C++编译器对64位整型的支持,这五种编译器分别是gcc(mingw32),g++(mingw32),gcc(linux

hanyonghuicn的专栏 1515

C/C++:long int与long long的区别

long int   long int即long,给人的感觉好像是长整型,但实际上,它和int一样,只有32位。cppreference给出的定义是—— int - basic integer type. The keyword int may be omitted if any of the modifiers listed below are used. If no length modif...

大山喵写博客的地方 21万+

【C/C++】C/C++编程——整型(二)

在 C++ 中,整型数据可以分为有符号数(Signed)和无符号数(Unsigned),这两种类型主要用于表示整数值,但它们在表示范围和用途方面有所不同。默认情况下,整数类型如 int、short、long 都是有符号数,通过在这些类型前加上unsigned字符型char可以是有符号的或无符号的,具体取决于编译器的默认设置。

shopeeai的博客 1885

【C/C++】深入理解整型截断与提升:原理、应用与区别

整型截断是当较大类型转换为较小类型时,数据的高位部分被丢弃。它可能会导致数据丢失或溢出,开发者需要小心使用。整型提升是在算术运算中,较小的整数类型会被提升为int类型或更大的类型,避免了精度丧失或溢出,保证了计算结果的正确性。理解这些概念,尤其是在进行类型转换和数值计算时,可以帮助开发者更好地处理数据类型,避免错误和不必要的性能问题。

卜及中的博客 1383

【Cpp】C和C++混合编程

一、混合编程杂绪 1.1 为什么需要混合编程 Cpp是从C演变过来的,C有很多优秀成熟项目和库,没必要在C++中重写,C++程序可以直接调用调用 庞大项目划分后一部分适合用C(底层),一部分适合用C++(中间层、上层) 1.2 混合编程的支撑 编译型程序的编译过程:源文件->目标(库)文件->可执行程序->镜像文件 任何编程语言执行时都必须是可执行程序,所以都必须先被编译成...

baymaxly的博客 7733
上一篇: C++实现系统服务暂停、停止、启动
下一篇: VC/MFC非模态对话框实例
UnixCRoot
博客等级 码龄14年 17粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值