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虚拟机>(从这里可以看到,字节码是一种文件格式) 我们都知道计算机只 ...
随机推荐
- python 类的定义和继承
python 2 中类 一.类定义: ? 1 2 class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性如果直接使用类 ...
- LeetCode 293. Flip Game
原题链接在这里:https://leetcode.com/problems/flip-game/description/ 题目: You are playing the following Flip ...
- Oracle存储过程创建及调用
在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器.在数据库系统中无论是存储过程还是触发器,都是通过SQL 语句和控制流程语句的集合来完成的.相对来说,数据库系统中的触发器也是一种存储 ...
- Boost.Asio基本原理(CSDN也有Markdown了,好开森)
Boost.Asio基本原理 这一章涵盖了使用Boost.Asio时必须知道的一些事情.我们也将深入研究比同步编程更复杂.更有乐趣的异步编程. 网络API 这一部分包含了当使用Boost.Asio编写 ...
- Python使用类
#coding:utf8 from selenium import webdriverfrom time import sleep class urlpage(object): #创建浏览器对象 de ...
- java代码swing编程JPaswordField类
总结:JPasswordField类是JTextField类的子类.用户在JPasswordField对象中输入的字符会被其他的字符替代 而挡住,JPasswordFiled组件主要用来输入口令 pa ...
- Oracle 下ASM磁盘总结
Oracle 下ASM磁盘总结 文章转载: Oracle下创建ASM磁盘总结https://blog.csdn.net/okhymok/article/details/78791841?utm_sou ...
- 将CDM中所有以Relatonship_开头的关系全部重命名,避免生成数据库因为重复关系名报错
Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl '当前model '获取当前活 ...
- 2016.4.6 WinForm显示PDF两种方法
1.最直接的方法,添加webbrowser控件 webb.Url = new Uri(path);可显示pdf控件. 如果需要在打开时跳转到某页,可用在路径后直接加#page=,例如webb.Url ...
- python django ORM 性能优化 select_related & prefetch_related
q = models.UserInfo.objects.all() select * from userinfo select * from userinfo inner join usertype ...