整数文字类型:默认不是 Int?
问题:
为什么for 循环迭代 100 亿次比迭代 1 次需要更长的时间
答案:
循环中的迭代变量是32位,溢出,导致无限循环。代表 100 亿的文字,尽管没有 L 后缀,也会被编译器自动提升到合适的范围(在本例中至少为 64 位)。
C :
根据 C 11 标准([lex.icon] ¶2),不带后缀的整数字面量的类型是第一个表 6 中的一个,其值可以表示:
Type |
---|
int |
long int |
long long int |
因此,在这种情况下,文字被解释为 long int 或 long long int(如果 long int 是 32 位)。
C:
在 C99 中([§6.4.4.1]),规则类似。整数常量的类型由可以表示其值的类似列表中的第一个类型确定。
实现定义的类型:
两者都是 C 11 ( [lex.icon] ¶3) 和 C99 ([§6.4.4.1 ¶5]) 允许整数文字为“扩展整数”类型”(特定于实现的整数类型)如果没有找到其他有效类型。
以上是为什么 For 循环中的大整数文字的行为与预期不同?的详细内容。更多信息请关注PHP中文网其他相关文章!