从size_t转换为char和around

  发布于 2022-12-21 12:24

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

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

#include

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(value) << "\'\n";

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

DevSolar.. 9

size_t是无符号的,普通char的签名是实现定义的.

铸造200签署炭将产生一个负的结果作为200为大于CHAR_MAX这是127最常见的情况,一个8位的字符.(高级注释 - 此转换也是实现定义的,但出于所有实际目的,您可以假定为负结果;实际上通常是这样-56).

铸造负值回一个无符号(但更宽)的整数类型将产生一个相当大的值,因为无符号算术环绕.

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

大多数编译器都有一个开关,可以让你切换charunsigned可以实验的开关.当您编写可移植代码时,请尝试编写在两种情况下都能正常工作的代码!

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有