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

时间:2015-09-01 15:51:04

标签: c++ c type-conversion

本教程中关于隐式类型转换的最后一个示例表明std :: cout<< 5u - 10;由于类型转换,将产生4294967291而不是-5。 我在C和C ++中尝试过这个。 C ++中的结果是承诺的,但是当使用C(printf(“%d \ n”,5u - 10);)时,结果为-5。 发生了什么?

2 个答案:

答案 0 :(得分:3)

在C示例中,没有任何类型转换。 C只计算表达式5u - 10并将结果推送到堆栈。然后printf看到一个类型字符,并在打印时解释堆栈上的值。类型字符是d%d)含义"十进制整数"因此,堆栈上的位置将作为int检索并打印为(带符号)十进制。

类型字符是否为例如ld%ld),堆栈上的位置将被检索为long,即使只推送了一个int,也会将其打印为(带符号)十进制数。同样,没有任何类型转换(只会打印一个无意义的数字)。

答案 1 :(得分:0)

更多的想法使人们意识到问题在于printf而不是转换本身。 请注意,写的是printf(“%d”)。这又执行了另一次转换回signed int,这就是为什么我看到-5的结果。 使用printf(“%u”)进行测试时,显示了承诺的结果(4294967291)。 为了封顶它,printf(“%X”)导致FFFFFFFB,这意味着这两个值,取决于有符号或无符号的解释。