Mic*_*ael 11 math size types programming-languages
编程语言(例如c,c ++和java)通常有几种类型用于整数运算:
signed和unsigned类型short,int,long,long longint32_tvs int(我知道这int32_t不是语言的一部分)当你应该使用它们时,你会如何总结?
默认的整数类型(int)在几乎所有语言中都获得了"等于第一"的优惠待遇.因此,如果不存在偏好其他类型的理由,我们可以将其用作默认值.
这些原因可能是:
<<和>>),请使用无符号类型确保在整数表示中没有任何"额外"1 .int32_t) - 如果您的程序是可移植的并且预计将使用不同的编译器进行编译,则这变得更加重要.更新(扩展保证大小类型)
我个人认为,没有保证固定大小的类型比现在更麻烦.我不会深入了解产生它们的历史原因(简要地说:源代码可移植性),但事实是,在2011年,很少有人(如果有的话)从中受益.
另一方面,使用这些类型时可能会出现许多问题:
由于这些原因(并且可能还有其他原因),使用这些类型在理论上是一个主要的痛苦.此外,除非要求极端的便携性,否则您根本无法获益.事实上,typedef的整个目的int32_t就是完全消除松散大小类型的使用.
实际上,如果您知道您的程序不会被移植到另一个编译器或体系结构,您可以忽略这些类型没有固定大小的事实,并将它们视为编译器使用它们的已知大小. .
一个接一个问题:
signed并且unsigned:取决于你需要什么.如果您确定,该号码将是未签名的 - 请使用unsigned.这将使您有机会使用更大的数字.例如,a signed char(1B)的范围是[-128:127],但是如果是unsigned- 最大值加倍(你还有一个位使用 - 符号位,所以unsigned char可能是255(所有位都是1)
short,int,long,long long-这些都是非常清楚的,不是吗?最小的整数(除外char)是short,下一个是int,等等.但这些是平台相关的 - int可能是2B(很久以前:D),4B(通常).long可能是4B(在32位平台上),或8B(在64位平台上),等等long long不是C++中的标准类型(它将在C++ 0x中),但通常它是一个typedef int64_t.
int32_tvs int- int32_t和其他类型的这种类型保证了它们的大小.例如,int32_t保证是32位,而正如我已经说过的那样,大小与int平台有关.