【发布时间】:2013-08-15 18:56:32
【问题描述】:
显然,普通char 有可能默认为已签名或未签名。 Stroustrup 写道:
普通字符被认为是有符号还是无符号是实现定义的。这将打开 一些令人讨厌的惊喜和实现依赖的可能性。
如何检查我的字符是已签名还是未签名?稍后我可能想将它们转换为int,并且我不希望它们为负数。我应该始终明确使用unsigned char 吗?
【问题讨论】:
-
@MitchWheat:是的。我遇到的例子:Cray T90、Cray SV1、Cray T3E、SGI MIPS IRIX、IBM PowerPC AIX。任何使用 EBCDIC 的系统都必须将
char设为无符号。 -
@KeithThompson:您应该将您的列表添加为this question的答案
-
您阅读了编译器的文档。
-
@PeteBecker:如果您想在编译时或运行时检查,这不一定有帮助(尽管通常最好编写不关心
char是签名还是未签名的代码,或使用signed char或unsigned char,如果你关心的话)。 -
@KeithThompson - 是的,很明显,这就是我发表评论而不是答案的原因。