有符号和无符号,以及C中的位扩展如何工作

时间:2010-04-24 23:34:28

标签: c types

unsigned short s;
s = 0xffff;
int i = s;

扩展如何在这里工作?添加了2个更大的顺序字节,但我很困惑1或0是否在那里扩展。这可能与平台有关,所以让我们关注Unix的作用。 int的两个较大的顺序字节是用1还是0填充,为什么?

基本上,计算机是否知道s是无符号的,并且正确地将0分配给int的高阶位?那么i现在是0x0000ffff?或者由于ints默认在unix中签名,它是否需要s(1)中的有符号位并将其复制到更高阶的字节?

1 个答案:

答案 0 :(得分:10)

不,unsigned值永远不会进行符号扩展。上传将始终用零填充这样的值。

更准确地说,无符号变量代表一个特定的数字,并且在演员表之后它仍然代表相同的数字,前提是新格式是可能的。

十六进制或否,C(尽管不是C99)和C ++被设计为在没有位的情况下工作,例如使用基数为10的数字。