C符号扩展还是零扩展常数?

C符号扩展还是零扩展常数?,c,C,C符号扩展常量还是零扩展常量? 例如: int a = 123 & 0x3 0x3是零扩展还是符号扩展? 一般来说,什么东西在C中是零扩展的,什么东西是符号扩展的 谢谢 C标准没有规定实现是使用2的补码、1的补码还是其他什么。因此,负值的表示也不是强制性的 但是,在您的特定情况下,0x3是一个正值,因此符号扩展和零扩展是相同的 至于符号扩展,这取决于值是有符号的还是无符号的 但是,在您的示例中,高位不会被设置,所以这无关紧要。结果将是零扩展。有符号或无符号,它们的计算结果不应该与正整数

C符号扩展常量还是零扩展常量? 例如:

int a = 123 & 0x3
0x3是零扩展还是符号扩展? 一般来说,什么东西在C中是零扩展的,什么东西是符号扩展的


谢谢

C标准没有规定实现是使用2的补码、1的补码还是其他什么。因此,负值的表示也不是强制性的


但是,在您的特定情况下,
0x3
是一个正值,因此符号扩展和零扩展是相同的

至于符号扩展,这取决于值是有符号的还是无符号的


但是,在您的示例中,高位不会被设置,所以这无关紧要。结果将是零扩展。

有符号或无符号,它们的计算结果不应该与正整数相同吗?通常只应在无符号表达式上使用“&”运算符。那么,这种行为是可以预测的。尝试无符号整数a=123U&0x3U@iolo:OP代码段的行为也是可预测的。@Oli:真的吗?即使c没有指定有符号整数如何映射到内存中?听起来很奇怪。。。(也许我忽略了一些东西:D)@iolo:参见(C99)标准的第6.2.6.2节。正值的值位表示形式必须与相应的无符号类型相同。因此,如果我们讨论的是范围内的正值(我们是),那么结果将与
无符号int
的结果相同。OP可能更感兴趣的是,C中的所有整型文字都有非负值,甚至类似于
0xffffff
。类似于int a=0xf的内容呢?a会是-1吗?还是15?@Andrew:正如@R.所说,整型文字总是被解释为正值(或零值)。