[英]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.