+-
c – 从size_t转换为char和around
我现在正在从C转换到C 11,我试图了解有关铸造的更多信息.
在这个问题的最后,你会看到一个小程序,它将一个数字作为输入,然后将其显示为数字和字符.然后它被转换为char,之后我将它转换回size_t.

当我输入200作为输入时,第一个cout打印200,但第二个cout打印18446744073709551560.
如何让它再次打印200?我使用错误的演员吗?我已经尝试过不同的演员作为动态和重新演绎.

#include<iostream>

using namespace std;

int main(){  
  size_t value;

  cout << "Give a number between 32 and 255: ";
  cin >> value;

  cout << "unsigned value: " << value << ", as character: `" << static_cast<char>(value) << "\'\n";

  char ch = static_cast<char>(value);
  cout << "unsigned value: " << static_cast<size_t>(ch) << ", as character: `"  << ch << "\'\n";
}
最佳答案
size_t是无符号的,plain char的signed-ness是实现定义的.

将200转换为带符号的char将产生否定结果,因为200大于CHAR_MAX,对于最常见的情况是一个8位字符,其为127. (高级注释 – 此转换也是实现定义的,但出于所有实际目的,您可以假定为负结果;实际上通常为-56).

将负值转换回无符号(但更宽)的整数类型将产生相当大的值,因为无符号算术会回绕.

您可以先将值转换为unsigned char(产生预期的小正值),然后再转换为更宽的无符号类型.

大多数编译器都有一个开关,允许您将纯字符切换为unsigned,以便您可以尝试使用它.当您编写可移植代码时,请尝试编写在两种情况下都能正常工作的代码!

点击查看更多相关文章

转载注明原文:c – 从size_t转换为char和around - 乐贴网