繁体   English   中英

C 和 C++ 之间类型转换的区别?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM