![](/img/trans.png)
[英]C: How to save the result of 2 32 bit unsigned integer into a signed integer
[英]Signed and unsigned, and how bit extension works in C
unsigned short s;
s = 0xffff;
int i = s;
扩展如何在这里工作? 添加了2个更大的顺序字节,但我很困惑1或0是否在那里扩展。 这可能与平台有关,所以让我们关注Unix的作用。 int的两个更大的顺序字节是用1还是0填充,为什么?
基本上,计算机是否知道s
是无符号的,并且正确地将0分配给int的高阶位? 所以i
现在是0x0000ffff
? 或者因为ints
是在unix中默认签名的,它是从s
(a 1)获取有符号位并将其复制到更高阶的字节?
不, unsigned
值永远不会进行符号扩展。 上传将始终用零填充这样的值。
更准确地说,无符号变量代表一个特定的数字,并且在演员表之后仍然代表相同的数字,前提是新格式是可能的。
十六进制或否,C(尽管不是C99)和C ++被设计为在没有位的情况下工作,例如使用基数为10的数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.