C++ Primer 笔记——基本内置类型

1.算术类型分为两类:整型和浮点型。算术类型的尺寸在不同机器上有所差别,下表列出了C++标准规定的尺寸的最小值。同时允许编译器赋予这些类型更大的尺寸。

一个char的大小和一个机器字节一样。

一个int至少和一个short一样大;

一个long至少和一个int一样大;

一个long long至少和一个long一样大;

 

以下摘自MSDN:

 

类别类型内容
整数 char 类型 char 是通常包含基本执行字符集成员的整数类型 - 默认情况下,这是 Microsoft C++ 中的 ASCII。
C++ 编译器将 char、signed char 和 unsigned char 类型的变量视为不同类型。char 类型的变量将提升到 int,就像它们在默认情况下是 signed char 类型一样,除非使用 /J 编译选项。 在这种情况下,它们被视为 unsigned char 类型并提升为 int(没有符号扩展)。
  bool bool 类型是可以具有 true 或 false 这两个值之一的整数类型。 其大小未指定。
  short short int 类型(或 short)是大于或等于 char 类型的大小但小于或等于 int 类型的大小的整型类型。
 short 类型的对象可声明为 signed short 或 unsigned short。Signed short 是 short 的同义词。
  int int 类型是大于或等于 short int 类型的大小但小于或等于 long 类型的大小的整数类型。
 int 类型的对象可声明为 signed int 或 unsigned int。Signed int 是 int 的同义词。
  __int8, __int16, __int32, __int64, __int128 固定大小的整数 __int``n,其中 n 是整数变量的大小(以比特为单位)。 (__int8、__int16、__int32、__int64 和 __int128 是 Microsoft 专用的关键字。 并非所有类型在所有体系结构上都可用。)
  long long 类型(或 long int)是大于或等于 int 类型的大小的整数类型。
 long 类型的对象可声明为 signed long 或 unsigned long。Signed long 是 long 的同义词。
  long long 大于无符号 long。
 long long 类型的对象可声明为 signed long long 或 unsigned long long。Signed long long 是 long long 的同义词。
  wchar_t, __wchar_t wchar_t 类型的变量指定宽字符或多字节字符类型。 默认情况下,wchar_t 是本机类型,但可以使用 /Zc: wchar_t- 使 wchar_t 成为 unsigned short 的 typedef。__wchar_t 类型是本机 wchar_t 类型的 Microsoft 专用同义词。
在字符或字符串文本前使用 L 前缀可指定宽字符类型。
浮点 float float 类型是最小的浮点类型。
  double double 类型是大于或等于 float 类型的大小但小于或等于 long double 类型的大小的浮点类型。
Microsoft 专用:long double 和 double 的表示形式完全相同。 但是,long double 和 double 是不同的类型。
  long double long double 类型是大于或等于 double 类型的浮点类型。

 

Microsoft 专用

下表列出了 Microsoft C++ 中的基础类型所需的存储量。  

类型大小
bool, char, unsigned char, signed char, __int8 1 个字节
__int16, short, unsigned short, wchar_t, __wchar_t 2 个字节
float, __int32, int, unsigned int, long, unsigned long 4 个字节
double, __int64, long double, long long 8 个字节
__int128 16 个字节

 

下表中指定的范围均包含起始值和结束值。

类型名称字节其他名称值的范围
int 4 signed –2,147,483,648 到 2,147,483,647
unsigned int 4 unsigned 0 到 4,294,967,295
__int8 1 char –128 到 127
unsigned __int8 1 unsigned char 0 到 255
__int16 2 short、short int、signed short int –32,768 到 32,767
unsigned __int16 2 unsigned short、unsigned short int 0 到 65,535
__int32 4 signed、signed int、int –2,147,483,648 到 2,147,483,647
unsigned __int32 4 unsigned、unsigned int 0 到 4,294,967,295
__int64 8 long long、signed long long –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned __int64 8 unsigned long long 0 到 18,446,744,073,709,551,615
bool 1 无 false 或 true
char 1 无 -128 到 127(默认)
0 到 255(当使用 /J 编译时)
signed char 1 无 –128 到 127
unsigned char 1 无 0 到 255
short 2 short int、signed short int –32,768 到 32,767
unsigned short 2 unsigned short int 0 到 65,535
long 4 long int、signed long int –2,147,483,648 到 2,147,483,647
unsigned long 4 unsigned long int 0 到 4,294,967,295
long long 8 无(与 __int64 等效) –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long long 8 无(与无符号的 __int64 等效) 0 到 18,446,744,073,709,551,615
enum varies 无 请参阅本文后面的备注
float 4 无 3.4E +/- 38(7 位数)
double 8 无 1.7E +/- 308(15 位数)
long double 与 double 相同 无 与 double 相同
wchar_t 2 __wchar_t 0 到 65,535

 

 

2.当我们赋给无符号类型一个超出它范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。当我们赋给带符号类型一个超出它表示范围的值时,结果是未定义的。

 

3.当一个算术表达式中既有无符号数又有int值时,那个int值就会转换成无符号数。

 

4.以0开头的整数代表八进制,以0x 0X开头的代表十六进制数。

 

5.指定字面值的类型。

 

posted @ 2017-07-23 16:03  MyCPlusPlus  阅读(281)  评论(0)    收藏  举报