微软自家的VC编译器所扩展的类型——DataType Ranges

项目需求,正在使用Mako Vimba相机,看到官方提供的demo中写到了typedef unsigned __int32    VmbUint32_t;
就想查查unsigned __int32与unsigned int的区别。

1、unsigned __int32是微软自家的VC编译器所扩展的类型,也称为unsigned int,占4个字节。如下图所示,更详细的信息可以查看链接:https://docs.microsoft.com/en-us/cpp/cpp/data-type-ranges?view=vs-2017

2、C++基本数据类型

C++定义了一套包括算术类型(arithmetic type)和空类型(void)在内的基本数据类型。其中算术类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值,仅用于一些特殊的场合,例如,最常见的是,当函数不返回任何值时,使用空类型作为返回类型。

算术类型分为两类:整型和浮点型。算术类型所占的比特数在不同机器上有所差距。

C++ Primer这本书的30页列举了C++标准规定的尺寸的最小值,同时允许编译器赋予这些类型更大的尺寸。某一类型所占的比特数不同,它所表示的数据范围不一样。如下图:

浮点型可表示单精度、双精度和扩展精度值。c++标准指定了一个浮点数有效位数的最小值,然而大多数编译器都实现了更高的精度。通常float以32bit来表示,double以63bit来表示,long double以96bit或128bit来表示。一般来说,类型floathe double分别由7和16个有效位。

除去布尔型和扩展的字符型之外,其他整型可以划分为带符号(sign)和无符号的(unsigned)两种。数据类型名前加unsigned,得到无符号型,不加前缀,默认为有符号的。

与其它整型不同,字符型被划分为了三种:char、signed char和unsigned char。需要注意的是:类型char和signed char并不一样。尽管字符型有三种,但是字符的表现形式却只有两种:带符号的和无符号的。char实际上会表现为上述两种形式的一种,具体哪种由编译器决定。

如果将字符类型用于文本,则使用未加限定的char, 类似于 'a', '0', 'abcde' 等。它也可以是一个值,但是,没有指定当做无符号还是有符号数。
如果将字符类型用作数字,那么:
signed char, 范围至少为[-127 ~ 127]。(一般计算机将实际的表示范围定为-128到127) 
unsigned char, 范围至少为 [0 ~ 255]。
说“至少”是因为C++标准只指定了对应每一种数据类型值的最小覆盖范围。

3、如何选择类型

猜你喜欢

转载自blog.csdn.net/weixin_38621214/article/details/85312540
今日推荐