而短整型、长整型技术上是正确的,我们更愿意使用速记版本的短期和长期的替代。添加前缀int使类型难区分变量int类型。这可能导致错误(如溢出)如果短期或长期的改性剂是无意中错过了。
因为char,int短,大小,和长可以依赖于编译器和/或计算机体系结构的不同,可以是整数的大小而不是名字的指导。我们经常把整数位或字节的类型被分配一个变量数。
当你在最后一节中了解到,一个变量n位可存储2 ^ n值不同。我们称之为设定值,数据类型可以保持它的范围。整数可以拥有两个不同的范围,这取决于他们是否有符号或无符号。
有符号和无符号变量
一个有符号整数是一个变量,可以持有正面和负面的数字。声明一个变量作为签名,你可以使用签名的关键词:
1
2
3
4
5
6
7
8
9
10
#include <iostream>
int main()
{
using namespace std;
unsigned short x = 65535; // largest 2-byte unsigned value possible
cout << "x was: " << x << endl;
x = x + 1; // We desire 65536, but we get overflow!
cout << "x is now: " << x << endl;
}
你认为这项计划的结果会是什么?
X是:65535
X是现在:0
出什么事了?非正式的,我们试图将溢出变量的数目太大了,结果是我们的价值“缠”范围的开始。对于非整数数据类型,溢出变量并不总是缠绕的范围,所以不要依赖这发生!
下面一段解释了为什么我们结束后得到0值溢出。它是可选的阅读。如果所有这些二进制的东西是混乱的,你可以跳过它。
数字65535表示的位模式1111 1111 1111 1111元。65535是数量最多的一个无符号2字节(16位)的整数可以持有,因为它使用的所有16位。当我们添加1的值,该值应为65536。然而,65536位模式表示为二进制为1 0000 0000 0000 0000,这是17位!因此,最高点(即1)丢失,和低16位都是左。0000 0000 0000 0000,对应于0位模式,这是我们的结果!
同样地,我们可以溢出的区间的底部和。