所以最近,我读了一个关于C,char/unsigned char/signed char中三种不同类型的问题。我现在遇到的问题并不是我迄今为止所经历过的(我的程序在所有测试过的计算机上都能正常工作,并且只针对小端(基本上所有使用Windows/Linux的现代台式机和服务器都适用?)。我经常重复使用char我为定义一个“字符串”(当然不是一个真正的字符串)作为临时变量定义的数组,例如,不是将另一个字符添加到堆栈中,而是重用像array [0]这样的成员之一。事实上,一个char总是签署,直到今天我读它实际上取决于实现。如果我现在有一个char和我分配一个负值,会发生什么?C cast和char signedity
char unknownsignedness = -1;
如果我写的
unsigned char A = -1;
我认为C风格的演员将简单地重新解释位和A表示为无符号类型的值变得不同。我认为这些C型表演只是对位的重新解释吗?我现在指的是签署< - >无符号转换。
所以如果一个实现有char作为无符号,我的程序会按预期停止工作吗?就拿最后一个变量,如果我现在做
if (A == -1)
我现在比较一个无符号字符到符号的字符值,所以会这样简单地比较不关心是否带符号位还是将返回false,因为显然不能是-1?我很困惑在这种情况下会发生什么。这也是我最关心的问题,因为我经常使用这样的字符。
什么铸造?没有任何地方铸造。如果要存储二进制(非字符)数据,请使用更好的(IMO)'int8_t'或'uint8_t'标准类型。 –
我的实现不支持C99,我认为int8_t是该版本 – user209347
如果我将一个有符号的值赋给一个无符号的值,会不会有转换?或者只有在数据大小不匹配的情况下才会投射? – user209347