char
是有符号还是无符号是实现定义的。这给我带来了一些麻烦。以下是一些例子:1)测试最高位。如果
char
是有符号的,我可以简单地将值与 0
进行比较。如果是无符号的,我则需要将值与 128
进行比较。这两种简单方法都不是通用的,不能同时适用于两种情况。为了编写可移植的代码,似乎必须直接操作位,这不是很好。2)值赋值。有时,我需要将一个位模式写入一个
char
值中。如果 char
是无符号的,可以使用十六进制表示法轻松完成,例如: char c = 0xff
。但是这种方法在 char
是有符号的情况下不适用。以 char c = 0xff
为例。 0xff
超出了有符号 char
可以容纳的最大值。在这种情况下,标准规定 c
的结果值是实现定义的。那么,有没有关于这两个问题的好主意?关于第二个问题,我想知道
char c = '\xff'
是否适用于有符号和无符号的 char
。注意:有时需要向字符写入显式位模式。请参见http://en.cppreference.com/w/cpp/string/multibyte/mbsrtowcs中的示例。
(x | 0x7F) != 0x7F
- Tony Delroychar c = '\xff'
(以及类似的char str []= "\xff\xff"
)适用于有符号和无符号char
。我发现的证据如下:1)http://en.cppreference.com/w/cpp/language/escape上的表格说明`'\xnn'`的表示是`byte nn。请注意使用了
byte`这个词。2)en.cppreference.com/w/cpp/string/multibyte/mbsrtowcs中的示例使用了此方法。3)https://google-styleguide.googlecode.com/svn/trunk/cppguide.html#Non-ASCII_Characters中的示例也是如此。 - Lingxi