【发布时间】:2016-10-18 10:55:21
【问题描述】:
快速简单的问题(几乎出于好奇):
例如,如果我在 C++ 程序中声明 long int,然后在采用 int 的函数中调用它,我知道它将毫无问题地工作,除非我给它一个 4 字节大小的值,这将导致打印内容不好。
但令我惊讶的是,它并没有以任何方式警告这一点。如果我声明一个 4 字节的long int,则系统知道它有 32 位来存储该值。但是,如果我将相同的long int 传递给它只调用int(2 个字节)的函数,我假设我在内存中使用了不应该被这个值使用的 16 位。
我说的对吗?还是仅使用作为参数接收的long int 中的最低 16 位?这里的流程是什么?
代码示例:
#include <stdio.h>
void test(int x) { // My question is why it accepts this?
printf("%d", x);
}
int main() {
long int y=4294967200; // 32 bits
test(y);
return 0;
}
【问题讨论】:
-
你能用一个实际的代码示例向我们展示你在说什么吗?
-
已编辑。我的问题是为什么它接受将 long int 传递给假定只接收 int 的函数。
-
这是因为你有一些隐式的整数转换。
-
是的,但实际发生了什么?收到后会缩小一半吗?或者只是溢出整数本身?
-
为了清楚起见,您确实在
long为 64 位的系统上编译了它,对吧?因为在 Windows(任何类型)或各种 UNIX 类似物的 32 位版本上,long和int通常是兼容的;没有数据丢失(除了文字被预先截断)。
标签: c++ integer long-integer