我有一個關於從書Delphi Foundations澄清數字格式
S := Format('It is %d', [65]); //assigns it to 64
爲64筆誤下面的代碼一對夫婦的問題嗎?
爲什麼
S := Format('%u', [-1]);
返回4294967295
?
我有一個關於從書Delphi Foundations澄清數字格式
S := Format('It is %d', [65]); //assigns it to 64
爲64筆誤下面的代碼一對夫婦的問題嗎?
爲什麼S := Format('%u', [-1]);
返回4294967295
?
S := Format('It is %d', [65])
會產生'It is 65'
。如果這本書另有說明,那就錯了。
S := Format('%u', [-1])
產生'4294967295'
因爲數字被格式化爲無符號值。帶符號的-1
與無符號的4294967295
具有相同的位模式(它們都是十六進制的$FFFFFFFF
)。
(1)錯字 - 見http://delphifoundations.com/errata/爲一個多(如果你自己發現任何人,我會爲回饋感謝)。
(2)對於我在書中說的原因:
如果有符號整數傳遞,它只是強制轉換爲無符號整數 。考慮到內部表示一個有符號整數的方式, 這不會從一個非專業人士的點 視圖剝離標誌。例如,
Format('%u', [-1])
返回'4294967295',而不是'1'。如果只是 剝離標誌是你想要的,然後將值傳遞給Abs
標準函數優先:Format('%u', [Abs(-1)])
。
因此,採取Integer/Int32和Cardinal/UInt32:這兩種類型的實例需要32位內存。然而,在Integer/Int32的情況下,其中一個位用於記錄符號(加號或減號?),而對於Cardinal/UInt32,則沒有記錄符號;相反,該位用於表示比Integer/Int32可以表示的數字大得多的數字。因此,Int32(-1)的內部表示恰好與UInt32(4294967295)的內部表示形式相同。
(3)「外行人」在這種情況下僅僅是「非技術人員」,「人誰不是一個怪胎」等的代名詞
有三個問題在這裏。請一次問一個。請確保問題已完成。不要引用不能鏈接到的資源。如果您要引用代碼,請100%確定您正確地抄錄了它。問題中的代碼不能編譯。最後,如果你想知道「躺人」是什麼意思,這是錯誤的網站。我建議你在字典中查看。 –
我從你的問題主體中刪除了簽名。問題會自動簽名。您不需要,也不應該手動進行。 –
'擱置不清楚你在問什麼'?什麼垃圾,儘管完全編輯我的書名的人(不是OP)沒有幫助。如果因爲我與這個主題的特殊關係而想要忽略我的答案,那麼很好,但是Remy Lebeau也給出了一個非常好的答案,在我做之前。 –