鍍金池/ 問(wèn)答/C  網(wǎng)絡(luò)安全/ -1無(wú)符號(hào)輸出

-1無(wú)符號(hào)輸出

#include <stdio.h>
int main()
{
    short num = -1;
    // 1000 0000 0000 0001(原碼)
    // 1111 1111 1111 1110(反碼)
    // 1111 1111 1111 1111(補(bǔ)碼)
    // 按無(wú)符號(hào)輸出, 結(jié)果為什么不是 65535
    printf("%u\n", num);
}

問(wèn)題:結(jié)果為什么不是 65535
謝謝諸位

回答
編輯回答
離魂曲

你得的結(jié)果應(yīng)該是 4294967295 吧? 32位(not 16位),-1對(duì)應(yīng)的2進(jìn)制是 32個(gè)1,所以結(jié)果是2^32-1

2017年2月4日 13:37
編輯回答
凹凸曼

你需要

printf("%hu\n", num);

格式化輸出中有個(gè) length 位來(lái)指示類型的, 具體如下圖:

clipboard.png

2018年9月11日 14:09