有什么不同?当使用printf("%ld")时,它们给出相同的输出
long x = 1024;
long y = 1024L;发布于 2019-07-31 21:57:53
在C源代码中,1024是int,1024L是long int。在赋值过程中,右侧的值将转换为左操作数的类型。只要遵守操作数组合的规则,并且右边的值在左操作数的范围内,就没有区别--值保持不变。
通常,不带后缀的十进制常量是int,而带L的十进制常量是long int。但是,如果它的值太大而无法用通常的类型表示,它将自动成为下一个更大的类型。例如,在最大int为2147483647的C实现中,源代码中的常量3000000000将是long int,即使它没有后缀。(请注意,此规则意味着源代码中的同一常量在不同的C实现中可以有不同的类型。)如果long int不够大,它将是long long int。如果这还不够大,它可以是带符号的扩展整数类型(如果实现支持带符号的扩展整数类型)。
上面的规则适用于十进制常量。还有十六进制常量(以0x或0X开头)和八进制常量(以0开头-020是十六的八进制,不像20是十进制的二十),它们可能有有符号类型,也可能有无符号类型。不同的整数类型很重要,因为溢出和转换的行为因类型而异。很容易将整数运算视为理所当然并假定它们有效,但重要的是要了解细节以避免出现问题。
https://stackoverflow.com/questions/57292046
复制相似问题