y=-1;
y=0xFFFFFFFF;
问题是,这两个语句在您的代码中是否有区别?说明。如果存在差异,请确保提供示例。
我本以为没有区别,但是如果变量y是无符号的,那会有很大的区别?
答案 0 :(得分:1)
y=-1;
y=0xFFFFFFFF;
-1
是类型int
的表达式,其值为负1。
0xFFFFFFFF
是类型int
,unsigned int
,long int
或unsigned long int
的常量,具体取决于实现方式。其值为4294967295
(2 32 -1)。请注意,它从不具有负值。
如果y
是有符号整数类型,则第一行将值-1
分配给y
。如果y
是无符号整数类型,则值-1
将转换为y
的类型,并产生其类型的最大值。
如果4294967295
在y
类型的范围内,则第二行将值4294967295
分配给y
。
如果不是,则y
是无符号类型,则将值4294967295
减去该类型的最大值加一的模。例如,如果y
是16位无符号类型,则分配的值为65535
。如果y
的签名类型不足以容纳4294967295
,则隐式转换将产生实现定义的结果。最常见的是,高阶位被丢弃,但这不是必需的。
例如,如果y
是32位有符号整数类型,则y=0xFFFFFFFF
将很可能将值-1
分配给y
。
最后,将超出范围的值转换为带符号的整数类型原则上可以引发实现定义的信号(从C99开始),但是我不知道执行此操作的任何实现。
我已经忽略了填充位的可能性。我也忽略了y
是浮点型或复杂型的可能性。
如果您告诉我们y
的声明方式以及您正在使用的实现中y
类型的范围,这个答案可能会短很多。
答案 1 :(得分:0)
四个区别: