C++ primer 学习之路 (1) 3.13short,int,long,long long
计算机内存的基本单元是位(bit)。可以将位看作电子开关,可以开,也可以关。关表示值0,开表示值1。8位的内存块可以设置出256种不同的组合,因为每一位都可以有两种设置,所以8位的总组合数为2×2×2×2×2×2×2×2,即256。因此,8位单元可以表示0-255或者-128到127。每增加一位,组合数便加倍。这意味着可以把16位单元设置成65 536个不同的值,把32位单元设置成4 294 672 296个不同的值,把64位单元设置为18 446 744 073 709 551 616个不同的值。作为比较,unsigned long存储不了地球上当前的人数和银河系的.星星数,而long long能够.
字节(byte)通常指的是8位的内存单元。从这个意义上说,字节指的就是描述计算机内存量的度量单位,1KB等于1024字节,1MB等于1024KB。然而,C++对字节的定义与此不同。C++字节由至少能够容纳实现的基本字符集的相邻位组成,也就是说,可能取值的数目必须等于或超过字符数目。在美国,基本字符集通常是ASCII和EBCDIC字符集,它们都可以用8位来容纳,所以在使用这两种字符集的系统中,C++字节通常包含8位。然而,国际编程可能需要使用更大的字符集,如Unicode,因此有些实现可能使用16位甚至32位的字节。有些人使用术语八位组(octet)表示8位字节。
如果要问我现在的电脑是64位的,那64代表了什么?字长:电脑技术中对CPU在单位时间内(同一时间)能一次处理的二进制数的位数叫字长。
所以能处理字长为8位数据的CPU通常就叫8位的CPU。
同理64位的CPU就能在单位时间内处理字长为64位的二进制数据。
8位1个字节。字节是电脑里的数据量单位。
在计算机中,数据只用0和1还种表现形式,(这里只表示一个数据点,不是数字),一个0或者1占一个“位”,而系统中规定8个位为一个字节,用来表示常用的256个字母、符号、控制标记。
在64位计算机中,一个字长所占的字节数为8
这4种类型(int、short、long和long long)都是符号类型,这意味着每种类型的取值范围中,负值和正值几乎相同。例如,16位的int的取值范围为-32768到+32767。
要知道系统中整数的最大长度,可以在程序中使用C++工具来检查类型的长度
sizeof运算符返回类型或变量的长度,单位为字节
#include<iostream>
using namespace std;
int main()
{
int a;
int x;
x=sizeof(a);
cout << x << endl;
system("pause");
return 0;
}
4是返回的系统中的整数的最大长度(字节数,也就是4*8=32位),这是我系统中整数的最大长度,不同系统可能不同
头文件climits(在老式实现中为limits.h)中包含了关于整型限制的信息
具体地说,它定义了表示各种限制的符号名称。例如,INT_MAX为int的最大取值,CHAR_BIT为字节的位数。程序清单
#include<climits>
using namespace std;
int main()
{
int n_int = INT_MAX;
short n_short = SHRT_MAX;
long n_long = LONG_MAX;
long long n_llong = LLONG_MAX;
cout << "int is" << sizeof(int) << "bytes" << endl;
cout << "short is" << sizeof n_short << "bytes" << endl;
cout << "long is" << sizeof n_long << "bytes" << endl;
cout << "long long is" << sizeof n_llong << "bytes\n" << endl;
cout << "int:" << n_int << endl;
cout << "short:" << n_short << endl;
cout << "long:" << n_long << endl;
cout << "long long:" << n_llong << endl;
cout << "Minimum int value = :" << INT_MIN << endl;
system("pause");
return 0;
}
sizeof运算符指出,在使用8位字节的系统中,int的长度为4个字节。可对类型名或变量名使用sizeof运算符。对类型名(如int)使用sizeof运算符时,应将名称放在括号中;但对变量名(如n_short)使用该运算符,括号是可选的:
符号常量—预处理器方式
climits文件中包含与下面类似的语句行:
在C++编译过程中,首先将源代码传递给预处理器。在这里,#define和#include一样,也是一个预处理器编译指令。该编译指令告诉预处理器:在程序中查找INT_MAX,并将所有的INT_MAX都替换为32767。因此#define编译指令的工作方式与文本编辑器或字处理器中的全局搜索并替换命令相似。修改后的程序将在完成这些替换后被编译。预处理器查找独立的标记(单独的单词),跳过嵌入的单词。也就是说,预处理器不会将PINT_MAXTM替换为P32767IM。也可以使用#define来定义自己的符号常量(参见程序清单3.2)。然而,#define编译指令是C语言遗留下来的。C++有一种更好的创建符号常量的方法(使用关键字const),所以不会经常使用#define。然而,有些头文件,尤其是那些被设计成可用于C和C++中的头文件,必须使用#define。