亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3636 | 回復(fù): 11
打印 上一主題 下一主題

一個(gè)二進(jìn)制移位產(chǎn)生的疑難問題…… [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2004-09-23 10:25 |只看該作者 |倒序?yàn)g覽
WORD src = 65535;
結(jié)果trace發(fā)現(xiàn)src << 16 = -65536,為什么會(huì)等于這么多?-65536用二進(jìn)制表示應(yīng)該是多少呢?
我怎么感覺src是16位的,左移16位后,應(yīng)該為0?

另外計(jì)算機(jī)中表示負(fù)數(shù)是用補(bǔ)碼還是反碼表示的?

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2004-09-23 10:45 |只看該作者

一個(gè)二進(jìn)制移位產(chǎn)生的疑難問題……

>;>;另外計(jì)算機(jī)中表示負(fù)數(shù)是用補(bǔ)碼還是反碼表示的?
一般而言,據(jù)我所知,都是補(bǔ)碼表示的

另外,WORD是什么類型的?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2004-09-23 11:24 |只看該作者

一個(gè)二進(jìn)制移位產(chǎn)生的疑難問題……

我剛看了一篇文章,里面說所有原碼、反碼、補(bǔ)碼的轉(zhuǎn)換都是在計(jì)算機(jī)的最底層進(jìn)行的,而在我們使用的匯編、C等其他高級(jí)語言中使用的都是原碼。
---------------------------------------------------------------------
可是我就更不懂了
WORD 是VC里面定義的unsigned short,就是最高位也是數(shù)字位,不是符號(hào)位。
那為何65535 << 16也就是1111111111111111左移16位后,得到的值確實(shí)-65536,也就是說其一無符號(hào)位移位運(yùn)算后,產(chǎn)生的值是有符號(hào)位;
其二,-65536是一個(gè)什么數(shù)?因?yàn)?6位的二進(jìn)制數(shù),如果是有符號(hào)位的,無論是原碼還是補(bǔ)碼,這個(gè)數(shù)都已經(jīng)超過范圍。
唯一只有一種可能,就是16位的數(shù),左移16位,值實(shí)際已經(jīng)擴(kuò)展到32位,擴(kuò)展到32位111111111111111100000000000000000
擴(kuò)展出來的數(shù)是什么碼?如果是補(bǔ)碼,取反+1的結(jié)果倒是和-65536的值相符。
那么也就是說,計(jì)算機(jī)中的數(shù)據(jù)用的還是補(bǔ)碼?

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2004-09-23 13:23 |只看該作者

一個(gè)二進(jìn)制移位產(chǎn)生的疑難問題……

>;>;匯編、C等其他高級(jí)語言中使用的都是原碼。
還是那句話,據(jù)我所知是補(bǔ)碼

我下去用gcc試了一下,printf用%d格式的話就是輸出-65536,我能想到的解釋就是%d格式輸出的時(shí)候進(jìn)行了擴(kuò)展,原因就是你說的那樣:有符號(hào)的擴(kuò)展到了32位。

論壇徽章:
1
榮譽(yù)會(huì)員
日期:2011-11-23 16:44:17
5 [報(bào)告]
發(fā)表于 2004-09-23 18:34 |只看該作者

一個(gè)二進(jìn)制移位產(chǎn)生的疑難問題……

這里WORD應(yīng)該是long型,4個(gè)字節(jié)
65535=00000000000000001111111111111111
左移16位得到
11111111111111110000000000000000
這是個(gè)負(fù)數(shù),為-65536

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2004-09-24 09:47 |只看該作者

一個(gè)二進(jìn)制移位產(chǎn)生的疑難問題……

WORD=unsigned short結(jié)果也是一樣的,因?yàn)檎麛?shù)(char, short, int, long)進(jìn)行四則運(yùn)算或移位操作的中間結(jié)果用32bits寄存器保存。unsigned/signed的區(qū)別僅在右移操作時(shí)才能體現(xiàn)出來,而這里是左移。
對(duì)于函數(shù)調(diào)用(比如printf)的參數(shù),是通過push指令,只能是32bits操作數(shù),因此printf內(nèi)部無法區(qū)分到底參數(shù)是何種類型(char,short,int,long),只能通過%d,知道是有符號(hào)int。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2004-09-24 10:15 |只看該作者

一個(gè)二進(jìn)制移位產(chǎn)生的疑難問題……

>;>;因?yàn)檎麛?shù)(char, short, int, long)進(jìn)行四則運(yùn)算或移位操作的中間結(jié)果用32bits寄存器保存。unsigned/signed的區(qū)別僅在右移操作時(shí)才能體現(xiàn)出來,而這里是左移。

確實(shí)如此!長見識(shí)了

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2004-09-24 10:15 |只看該作者

一個(gè)二進(jìn)制移位產(chǎn)生的疑難問題……

這本來就沒有任何問題。

#include <stdio.h>;
unsigned short us;
main()
{
    us = 0xffff;
    us <<= 16;
    printf("sizeof(us) = %d   %d\n", sizeof(us), us);
}

結(jié)果是0。
誰說printf不能區(qū)分char, short?

原帖由 "mfmain" 發(fā)表:
WORD=unsigned short結(jié)果也是一樣的,因?yàn)檎麛?shù)(char, short, int, long)進(jìn)行四則運(yùn)算或移位操作的中間結(jié)果用32bits寄存器保存。unsigned/signed的區(qū)別僅在右移操作時(shí)才能體現(xiàn)出來,而這里是左移。
對(duì)于函數(shù)調(diào)用(比?.........

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2004-09-24 11:40 |只看該作者

一個(gè)二進(jìn)制移位產(chǎn)生的疑難問題……

如果改為下面的就出現(xiàn)問題了:

  1. #include <stdio.h>;
  2. unsigned short us;
  3. main()
  4. {
  5. us = 0xffff;
  6. //us <<= 16;
  7. printf("sizeof(us) = %d %d\n", sizeof(us), us << 16);
  8. }

復(fù)制代碼


之所以出問題應(yīng)該是因?yàn)榘製s傳進(jìn)printf的時(shí)候用的是32位的寄存器吧?

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2004-09-24 11:56 |只看該作者

一個(gè)二進(jìn)制移位產(chǎn)生的疑難問題……

出現(xiàn)問題了就對(duì)了。
printf("sizeof(us) = %d   %d\n", sizeof(us), (unsigned short)(us << 16));
就好了。

否則:

long1 = short2 + 2;
是把short2先類型轉(zhuǎn)換成long, 再運(yùn)算,結(jié)果給long1
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP