【发布时间】: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 char和unsigned char不同的类型这样的。所以编译器供应商必须在他们的编译器实现中自己决定char是有符号还是无符号