【问题标题】:What is the range of a char variable ? -127 to 127 or 0 to 255? [duplicate]char 变量的范围是多少? -127 到 127 还是 0 到 255? [复制]
【发布时间】:2018-11-29 17:58:53
【问题描述】:

我知道 C++ 有 3 种类型的 char 变量。

char // with range : -127 to 127 or 0 to 255 ??
signed char // with range : 0 to 255
unsigned char // with range : -127 to 127

对吗?那么到底哪个是char?

我的问题是我想使用需要 * char 参数的 istream::read 函数。但是,我知道我的程序将读取的值将在 0 到 255 之间。

我怎么知道如果我这样做file.read((char *)buffer, size);,我将保证正在读取的每一件事都不会被设置为 -127 到 127 范围内的值?

编辑:我知道我的 char 可以是两个范围,具体取决于我的平台/实现。正确的?如果是,我怎么知道我正在使用哪个平台/实现?它是否取决于我的 IDE 编译器?操作系统?

【问题讨论】:

  • char 是有符号还是无符号由实现定义。周围可能有骗子......
  • 对于 2 补码,它不是 -127 而是 -128。并且通常编译器有一个开关来确定一个 char 是有符号还是无符号。
  • "我怎么知道如果我这样做 file.read((char *)buffer, size);,我会保证每一个被读取的东西都不会被设置为一个值-127 到 127 的范围?” - 如果不查阅特定实现的文档或检查 CHAR_MAX ,您将无法知道。
  • 我认为你的问题很有趣,但重点是 char 的大小而不是从 istream 中读取,这让事情变得不太清楚
  • @MariosAth 的意思是,C++ 标准并没有定义 char 本身是有符号还是无符号,只是为了函数重载和目的,它是与 signed charunsigned char 不同的类型这样的。所以编译器供应商必须在他们的编译器实现中自己决定char是有符号还是无符号

标签: c++ char


【解决方案1】:

如果在您的平台上 char 已签名,那么它的 -128 到 127。

如果在您的平台上 char 是无符号的,那么它的 0 到 255

limits.h 中的CHAR_MAX 会告诉你你有哪些

这当然都是基于您有 8 个字节字符的假设。 CHAR_BIT 肯定会告诉你

【讨论】:

  • 我认为您在前两句中都漏掉了“至少”这两个词。
  • 你的第一句话也假设了二进制补码,这不能保证 (yet)。
猜你喜欢
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
相关资源
最近更新 更多