回答
如果你設置一個二進制補碼整數的所有位,那麼你得到-1。
讓我說明了(非常小的),二位有符號整數使用補:
00 → 0
01 → 1
10 → −2
11 → −1
這僅僅是從0開始計數了,過去的溢出從1到-2並且結束-1 。正如你所看到的,如果你清除所有的位,你得到0,如果你設置它們全部,你得到-1(不管整數有多寬)。
(請注意,使用基本的人都知道這已經,因爲沒有布爾運算符和工作的事情同樣出色位運算符,除了真正的是-1,而不是1)
即零實際上是由32個零比特表示,如PHP整數類型是32位有符號整數,而不是單位:
0000 0000 0000 0000 0000 0000 0000 0000
所以按位非翻轉其中所有,導致-1的two's complement(與最左邊的一個代表符號):
1111 1111 1111 1111 1111 1111 1111 1111
如果你不明白爲什麼所有的位都是-1,那就問問自己:如果你給它加1,你會得到什麼?答案:溢出並且所有位都爲零。當你添加一個數字時,我們有一個給出零的數字的名稱... -1。 – 2012-01-09 07:22:40
David,這對於二進制補碼是正確的,但對於符號位或補碼(至少不是天真的)不適用。從沒有親密認識電腦的人的角度來看,任何一種選擇都可以同樣解釋。 – Joey 2012-01-09 07:25:45
是它應該與2的補數系統,與設置的所有位的數量等於-1,自0擁有所有位取消設置,〜$ A將其所有的位設置。
因此,代碼的行爲如預期。
整數以2的讚美形式存儲。
此形式可以是輪廓廣告如下:
1)如果要存儲的數是正的值,則它的二進制值被存儲
例如 $ VAL = 5;
這裏$ VAL包含ordiary二進制equivlent 5 = 0101 //比特數取決於具體
2)如果你存儲負的數的說-5,然後存儲在二進制補碼小號
$val = -5;
這裏先2的5恭維被發現即只需1的5 + 1
~ 0101 = 1010
將TnEN的恭維加1
1010 +
1
-----
1011
並且這個1011被存儲在$ val中。
以相同的方式,$ val = 0; 00存儲
〜$ VAL => 11這是-2 2的恭維形式equalient
最後,如果你仔細觀察,你可能會問,
所以我怎麼能代表11 ?因爲它的二進制值是1011與2的comp中的-5值相沖突?
答案在於用來表示數字的位數。
2的complimwent形式如果有N位,然後你可以從
-2^(n-1) to 2^(n-1) -1 ;
- 1. 與其他語言互操作?
- 2. 這是可能的java或任何其他編程語言
- 3. 操縱在MATLAB或任何其他語言的數學函數
- 4. 不能要求語言學或其他LIB,從文件
- 5. 將語言功能集成到其他語言中
- 6. 在ubuntu上用php或其他語言編輯文件
- 7. atoi()其他語言
- 8. 使用Rails或其他語言
- 9. 還有其他什麼像WCF,其他平臺,操作系統,語言?
- 10. 標題在其他語言不翻譯
- 11. C++或任何其他語言的可選結構打字可能性?
- 12. IIS6中缺少標題(ColdFusion,也可能是其他語言)
- 13. C#(或任何其他語言)的複雜裝修新語言功能
- 14. php優於其他腳本語言
- 15. json_decode PHP錯誤?同樣的Json工作在其他語言
- 16. 其他.NET語言的重載操作符
- 17. C#類與其他.NET語言互操作
- 18. libumem是否僅在Solaris操作系統或其他操作系統中可用?
- 19. 如何操作位彙編語言MIPS32
- 20. php - proc_open(或其他功能)
- 21. .equal不能在其他語句中工作如果語句爲
- 22. 其他語言還可以通過指針操作來創建數組?
- 23. 使用PHP或其他編程語言驗證電子郵件?
- 24. 調整大部分圖像(php或任何其他語言)
- 25. ajax和php(或其他服務器語言),哪個更好?
- 26. 使用PHP或任何其他語言獲取引用鏈接
- 27. 腳本語言是否可以翻譯成其他語言?
- 28. 只顯示php而不是netbeans 6.9中的其他語言?
- 29. 在其他語言中recaptcha詞
- 30. Django模板語言:在其他語言中使用for循環
它確實代表只值。在兩個讚美中,所有1的位字段是-1。 http://en.wikipedia.org/wiki/Two%27s_complement – GordonM 2012-01-09 07:29:21