首页  >  文章  >  后端开发  >  为什么 C/C 中 'long long' 的行为与 'int' 或 'long' 不同?

为什么 C/C 中 'long long' 的行为与 'int' 或 'long' 不同?

DDD
DDD原创
2024-11-07 17:23:03671浏览

Why does 'long long' behave differently than 'int' or 'long' in C/C  ?

理解 C/C 中的 Long Long

在 C 和 C 中,“long long”数据类型表示 64 位有符号整数的精度。这使得它能够表示“int”或“long”等标准整数类型无法容纳的极大或极小的数字。

在提供的代码片段中,提出了有关“long”行为的几个问题long' 变量:

  • 'long long' 的大小: 为什么 'sizeof(num3)' 产生 0,表示变量未初始化?
  • 整数溢出: 为什么代码编译和执行时没有错误,当注释行 ('num3 = 100000000000;') 取消注释时,生成的值远大于 10000000000?
  • 文字整数常量: 为什么将大于 'long' 类型限制的整数常量分配给 'long' 变量会导致编译错误?

'long long' 的大小:

“sizeof”运算符返回变量或数据类型的大小(以字节为单位)。由于“num3”未使用任何值进行初始化,因此它保持未初始化状态,并且其大小未定义,从而导致 0。要解决此问题,请使用“long long”值显式初始化“num3”。

整数溢出:

C 以静默方式处理整数溢出。当分配给变量的值超过其容量时,它会回绕并继续从最小值开始计数。在这种情况下,将 10000000000 分配给“long”变量会导致溢出,结果为负值。然而,由于 'num2' 是一个 'long long',它可以容纳大值而不会溢出。

文字整数常量:

在 C 和 C 中,整数常量是强类型的。分配超出目标数据类型限制的文字整数常量会导致编译错误。在这个例子中,常量 100000000000 超出了 'long' 的范围,添加 'LL' 明确指定它应该被视为 'long long' 常量。

以上是为什么 C/C 中 'long long' 的行为与 'int' 或 'long' 不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn