根据标准,是否char
签名是实现定义的。这给我带来了一些麻烦。以下是一些示例:
1) 测试最高有效位。如果char
已签名,我可以简单地将值与0
. 如果无符号,我将值与之进行比较128
。这两种简单的方法都不是通用的,并且适用于这两种情况。为了编写可移植的代码,我似乎必须直接操作这些位,这并不整洁。
2) 赋值。有时,我需要将位模式写入一个char
值。如果char
是无符号的,这可以使用十六进制表示法轻松完成,例如char c = 0xff
. char
但是这种方法在签名时不适用。举个char c = 0xff
例子。超出了有符号可以保持0xff
的最大值。char
在这种情况下,标准表示 的结果值c
是实现定义的。
那么,有人对这两个问题有好的想法吗?关于第二个,我想知道char c = '\xff'
signed 和 unsigned 是否都可以char
。
注意:有时需要将显式位模式写入字符。请参阅http://en.cppreference.com/w/cpp/string/multibyte/mbsrtowcs中的示例。