回答
問題1
爲什麼〜0xF等於0xFFFFFFF0?
首先,這意味着你在32位機器上運行它。這意味着0xF實際上是在hexadecimal0x0000000F
,
這意味着0xF是 0000 0000 0000 0000 0000 0000 0000 1111
的二進制形式。
的~
的操作裝置的非操作。在二進制表示中,每0到1和每1到0更改。這將使〜0xF成爲:二進制表示中的 1111 1111 1111 1111 1111 1111 1111 0000
。
這實際上是0xFFFFFFF0
。
請注意,如果你這樣做了16位機上的~0xF
答案是0xFFF0
。
問題2
你寫了錯誤的說法,應該是0xF & 0x1
。請注意,0x1
0x01
,0x001
和0x0001
都是相同的。因此,讓我們改變這個hexdecimal號二進制表示:
0xF
是:
0000 0000 0000 0000 0000 0000 0000 1111
和0x1
是:
0000 0000 0000 0000 0000 0000 0000 0001
的&
操作遵循以下規則:
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
這樣算下來,爲每一位,你得到的結果是:
0000 0000 0000 0000 0000 0000 0000 0001
這實際上是0x1
。
附加
|
裝置按位或運算。它遵循:
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
^
指按位異或運算。它遵循:
0^0 = 0
0^1 = 1
1^0 = 1
1^1 = 0
你可以得到更多的信息here。
如果您存儲0xF在一個32位的 「詮釋」,所有32位翻轉,所以〜0xF = 0xFFFFFFF0。
看到這個: http://teaching.idallen.com/cst8214/08w/notes/bit_operations.txt
他們給了很好的解釋
你否定0xF,其翻轉所有位的他們的倒數。因此,例如,您有8位:0xF = 00001111
。如果你否定它,它會變成11110000
。
由於您使用的是32位,所以F就完全擴展了。 1111 .... 0000
關於第二個問題,您使用的是邏輯與,不按位與。這兩個行爲完全不同。
「您正在否定0xF」 - 錯誤;倒置不是否定。 –
這聽起來像你的困惑是,你相信0xF是一樣的0b1111111111111111。它不是,它是0b0000000000001111。
〜0xF反轉其所有位,去
from 0x0000000F = 00000000000000000000000000001111 (32 bits)
to 0xFFFFFFF0 = 11111111111111111111111111110000 (32 bits)
一個& & b爲1,如果a和b是非零,和〜0xF和0x01都是非零的。
在C中,~0xF
永遠不能等於0xFFFFFFF0
。前者是負數(C允許的三個簽名表示中的任何一個),後者是一個正數。但是,如果二者在二進制補碼實現中轉換爲32位無符號類型,轉換後的值將相等。
至於~0xF && 0x01
,&&
算子是邏輯的,而不是按位和。
- 1. 爲什麼我的PowerShell主機在64位機器上以32位運行?
- 2. 爲什麼32位等於4Giga字節而不是4吉位
- 3. 在64位機器上生成32位
- 4. 爲什麼valgrind在64位架構上僅限於32 Gb?
- 5. 爲什麼在32位機器上有2GB redis.io數據庫的限制
- 6. '和esp,0xfffffff0'是什麼?
- 7. 爲什麼int 32位?
- 8. 在32位機器上使用48bit
- 9. 爲什麼32位機器的最大容量是4GB?
- 10. 在64位機器上發生32位整數溢出時會發生什麼?
- 11. 爲什麼在ARM處理器上,PC仍然處於Thumb模式的32位?
- 12. SetupDiCallClassInstaller在64位機器上爲32位編譯時引發ERROR_IN_WOW64。
- 13. Microsoft建議在64位計算機上安裝32位IIS 7 AppPools。爲什麼?
- 14. 在32位機器上搜索大於4GB的圖形
- 15. 在64位機器上處理文件,但在32位機器上開發
- 16. Win 7上安裝32位Canopy 32位機器失敗
- 17. 爲什麼1字節等於8位?
- 18. JProfiler GUI在32位機器上連接到64位服務器
- 19. 爲什麼64位程序文件大於32位?
- 20. 在安裝在32位機器上的hyper-v上安裝64位虛擬機
- 21. 爲什麼__sync_add_and_fetch適用於32位系統上的64位變量?
- 22. ASP.NET 32位機器現在編譯試圖在64位機器上運行
- 23. 如何找出爲什麼.NET應用程序在64位機器上以32位運行
- 24. 爲什麼我無法在64位機器上正確讀取HKCU中的32位註冊表值?
- 25. 爲什麼D編譯的main()在64位機器上有一個32位的返回值?
- 26. 在Windows 7 64位機器上將32位exe轉換爲64位exe
- 27. 最大RAM 32位機器
- 28. 32或64位機器
- 29. 用於在32位機器上添加兩個64位數的彙編宏
- 30. 有什麼辦法在32位計算機上執行64位程序?
'&&'是邏輯AND,不是按位AND。 〜是一個標準的按位操作。 – chris
我知道做什麼,但我認爲0xF(即使在32位)將是0x11111111? – sebi
'0xF'是'0x0000000F'。在什麼世界將等於'0x11111111'? –