C/C++中有关字长与平台无关的整数类型
C99标准定义一个叫着<stdint.h>的头文件,该头文件定义了一系列各种类别的整数类型typedef名字。尽管速多C++工具支持该头文件已经有一段时间了,但它尚未正式收录于C++标准,因此,在使用该头文件之前,你应该先阅读你的编译器文档,看看它是否支持该文件。在某些C++ 的编译器中,如GNC,为了能使用C99标准的这些新特性,就在<inttypes.h>头文件中引入了这个文件< stdint.h>.
字长固定的整型类型
C99标准在<stdint.h>这个头文件的类型定义中,有一套是字长固定的整型类型:
int8_t int16_t int32_t int64_t
与其对应的字长固定的无符号型整型类型有:
uint8_t uint16_t uint32_t uint64_t
它们的名字非常直观。例如,int8_t是长度固定为8比特的有符号整型类型,而uint8_t则是字长固定为8比特的无符号型整型类型。当你需要确保在不同的平台上,整型数据的字长固定不变,那么你就可以使用这些typedef名字。允许对期望的性质进行更为详细的描述。例如,有的类型的名字是 int_least8_t,它至少有 8 位,还有 int32_t,它恰好是 32 位。
C99标准标准保证至少可以访问 8 位、16 位、32 位和 64 位类型。没有保证会提供精确宽度类型。不要使用这种类型,除非您肯定是实在不能接受更大的类型。另一个可选的类型是新的 intptr_t 类型,它是一个足够大的可以容纳一个指针的整数。并不是所有的系统都提供这样一种类型(尽管当前所有的 Linux 和 BSD 实现都提供)。
字长最小的快速整型类型
该头文件还定义了另外一套typedef名字,即“最小指定长度的快速整数类型”。这套typedef名字中的每一种都表示一种整数类型,它满足在长度不小于某个指定长度的前提下,拥有最快的处理速度。这些整数类型的名字为int_fastX_t(有符号)或者uint_fastX_t(无符号),其中“X”表示最小指定长度。例如,int_fast32_t指得是字长至少为32比特的快速有符号整型类型。最小字长快速整型类型有:
int_fast8_t int_fast16_t int_fast32_t int_fast64_t
对应的无符号整型类型有:
uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
什么情况下使用这些typedef名字?
假设你需要一个字长不少于16比特的循环计数器,那么你会希望该计数器的类型总是当前计算机CPU最佳操作的整型类型,而int_fast16_t可以保证任何平台上的编译器总是选择字长不少于16比特的最快整型类型。
| #include <inttypes.h> for (int_fast16_t n=0; n<30000; ++n) { //.. do something } |
关于整型参数移植
假如你需要确定容量的整型,那么你应该使用stdint.h或者inttypes.h中定义的类型。
这些头文件中定义了以下的整数类型:
| int8_t; uint8_t; int16_t; uint16_t; int32_t; uint32_t; int64_t; uint64_t; int_least8_t; uint_least8_t; int_least16_t; uint_least16_t; int_least32_t; uint_least32_t; int_least64_t; uint_least64_t; int_fast8_t; uint_fast8_t; int_fast16_t; uint_fast16_t; int_fast32_t; uint_fast32_t; int_fast64_t; uint_fast64_t; intptr_t; uintptr_t; intmax_t; uintmax_t; |
如果是boost库的用户则比较幸运,因为在boost库中,<cstdint.hpp>这个头文件封装了C99标准<stdint.h>中的整数类型.
阅读(419) | 评论(1) | 转发(0) |
-->
C/C++中有关字长与平台无关的整数类型的更多相关文章
- Java的平台无关性
转载自:http://www.cnblogs.com/Y/archive/2011/03/22/JavaVM_Learning_Chapter2_Platform_Independence.html ...
- 深入Java虚拟机读书笔记第二章平台无关性
Java的体系结构对平台无关的支持 Java平台 Java的体系结构通过几种途径支持Java程序的平台无关性,其中主要是通过Java平台自己.Java平台扮演一个运行时Java程序与其下的硬件和操作系 ...
- 深入Java虚拟机(2)——Java的平台无关性
一.平台无关性的好处 Java技术在网络环境下非常有用,其中一个关键理由是,用Java创建的可执行二进制程序,能够不加改变地运行于多个平台. 这样的平台无关性随之带来许多的好处.这将极大地减轻系统管理 ...
- Java 平台无关性的基石
Java 在刚刚诞生之初就提出过一个非常著名的口号:"一次编写,到处运行", 这句话充分表达了软件开发人员对冲破平台界限的渴望 在竞争激烈的 IT 领域,各种不同的硬件体系结构和不 ...
- JAR 归档文件是与平台无关的文件格式
JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件,可以使用Java软件打开. 为 J2EE 应用程序创建的 JAR 文件是 EAR 文件 ...
- 与平台无关的类型,int8_t,uint8_t
pecific integral type limits Specifier Common Equivalent Signing Bits Bytes Minimum Value Maximum Va ...
- 一些平台无关的整型类型,int8_t,uint8_t....
pecific integral type limits Specifier Common Equivalent Signing Bits Bytes Minimum Value Maximum Va ...
- Java是如何实现平台无关性的
相信对于很多Java开发来说,在刚刚接触Java语言的时候,就听说过Java是一门跨平台的语言,Java是平台无关性的,这也是Java语言可以迅速崛起并风光无限的一个重要原因.那么,到底什么是平台无关 ...
- Java虚拟机与平台无关性
概述 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. --<深入理解Java虚拟机>(从这里可以看到,字节码是一种文件格式) 我们都知道计算机只 ...
随机推荐
- Docker 容器相关技术
Docker 依赖的Linux内核特性 Namespaces 命名空间 Control groups (cgroups) 控制组 理解这两个特性,能够更好的帮助我们理解docker的资源分配和管理 N ...
- LeetCode 251. Flatten 2D Vector
原题链接在这里:https://leetcode.com/problems/flatten-2d-vector/ 题目: Implement an iterator to flatten a 2d v ...
- django的related_name
转:https://segmentfault.com/q/1010000003705677 就是一个反向关联的属性,比方说model里面定义两个class,一个是A,一个是B class A(Mode ...
- redis的no-appendfsync-on-rewrite参数
redis提供了两种持久化机制,rdb和aof. 关于aof的原理,类似于预写日志,不再解释.其中几个选项如下: appendfsync always:总是写入aof文件,并完成磁盘同步appendf ...
- ASP.NET 整理比较全的URL重写解决方案
经常有人请我指导应该如何动态地“重写”URL,以在他们的ASP.NETweb应用中发布比较干净的URL端点.这个博客帖子概述了几个方法,你可以用来在ASP.NET中干净地映射或重写URL,以及按照你自 ...
- 媒体查询ipad,pc端
媒体查询 /* 判断ipad */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px){ ...
- CentOS6.8部署MongoDB集群及支持auth认证
三个节点的副本集如下图所示: 实验目的: 配置MongoDB的3节点副本集 3个节点的副本集都要开启auth认证,并且开启认证后,能互相通信 第一步 - 准备环境 准备三个虚拟机,其中一个用作Prim ...
- java代码分解质因数
总结: 循环...首位 逻辑要清晰 很简单.首先质因数最小的2.因为1不是质数 然后当输入的数刚好为2时,结束.不用下一步了.否则在循环里不停的输出一个数, 当输入的数比2大时,分能被2整除和不能被2 ...
- Sass、Less和Stylus
1.背景介绍 1.Sass背景介绍 Sass是对CSS(层叠样式表)的语法的一种扩充,诞生于2007年,最早也是最成熟的一款CSS预处理器语言,它可以使用变量.常量.嵌套.混 入.函数等功能,可以更有 ...
- spring特点与好处
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development a ...