[英]What is the difference between type casting and type conversion in C++ or Java?
[英]Difference in type conversion between C and C++?
本教程中关于隐式类型转换的最后一个示例指出std::cout << 5u - 10;
由于类型转换,将产生4294967291
而不是-5
。 我在 C 和 C++ 中都试过这个。 C++ 中的结果与承诺的一样,但是当使用 C ( printf("%d\\n", 5u - 10);
) 时,结果是-5
。 发生了什么?
在 C 示例中,没有任何类型转换。 C 只是计算表达式5u - 10
并将结果压入堆栈。 然后 printf 看到一个类型字符并在打印它时解释堆栈上的值。 类型字符是d
( %d
) 表示“十进制整数”,因此堆栈上的位置作为 int 检索并打印为(有符号)十进制。
例如,如果类型字符是ld
( %ld
),则堆栈上的位置将作为 long 检索,即使只推送了一个 int,也将打印为(有符号的)十进制数。 同样,没有任何类型转换(只会打印一个无意义的数字)。
多一点思考后意识到问题出在printf
而不是转换本身。 请注意,写入的是printf("%d")
。 这执行了又一次转换回有signed int
,这就是为什么我看到-5
的结果。
使用printf("%u")
进行测试时,显示了承诺的结果( 4294967291
)。
为了结束它, printf("%X")
导致FFFFFFFB
这意味着这两个值,取决于有符号或无符号解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.