根据标准,是否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中的示例。