所以最近,我读到了一个关于 C 中三种不同类型 char/unsigned char/signed char 的问题。我现在遇到的问题不是我到目前为止遇到的问题(我的程序在所有经过测试的计算机上都能正常工作,并且只针对 little-endian(基本上所有使用 Windows/Linux 的现代台式机和服务器对吗?)。我经常重用一个 char我为保存一个“字符串”(当然不是真正的字符串)作为临时变量而定义的数组。例如,我没有将另一个字符添加到堆栈中,而是重用了数组 [0] 之类的成员之一。但是,我基于此策略事实上, char 总是会被签名, 直到我今天读到它实际上取决于实现. 如果我现在有一个 char 并且我给它分配一个负值会发生什么?
char unknownsignedness = -1;
如果我写
unsigned char A = -1;
我认为 C 风格的转换只会重新解释位,并且 A 表示为无符号类型的值会变得不同。我对这些 C 风格的演员表只是对位的重新解释是对的吗?我现在指的是有符号 <-> 无符号转换。
因此,如果实现的 char 为无符号,我的程序会按预期停止工作吗?取最后一个变量,如果我现在这样做
if (A == -1)
我现在将一个无符号字符与一个有符号字符值进行比较,所以这会简单地比较不关心符号的位还是会返回 false,因为显然 A 不能为 -1?我很困惑在这种情况下会发生什么。这也是我最关心的问题,因为我经常使用这样的字符。