簡體   English   中英

有符號和無符號,以及C中的位擴展如何工作

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM