mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-13 04:10:58 +00:00
deploy
This commit is contained in:
@@ -3623,7 +3623,7 @@
|
||||
<p><strong>Q</strong>:在構建堆疊(佇列)的時候,未指定它的大小,為什麼它們是“靜態資料結構”呢?</p>
|
||||
<p>在高階程式語言中,我們無須人工指定堆疊(佇列)的初始容量,這個工作由類別內部自動完成。例如,Java 的 <code>ArrayList</code> 的初始容量通常為 10。另外,擴容操作也是自動實現的。詳見後續的“串列”章節。</p>
|
||||
<p><strong>Q</strong>:原碼轉二補數的方法是“先取反後加 1”,那麼二補數轉原碼應該是逆運算“先減 1 後取反”,而二補數轉原碼也一樣可以透過“先取反後加 1”得到,這是為什麼呢?</p>
|
||||
<p><strong>A</strong>:這是因為原碼和二補數的相互轉換實際上是計算“補數”的過程。我們先給出補數的定義:假設 <span class="arithmatex">\(a + b = c\)</span> ,那麼我們稱 <span class="arithmatex">\(a\)</span> 是 <span class="arithmatex">\(b\)</span> 到 <span class="arithmatex">\(c\)</span> 的補數,反之也稱 <span class="arithmatex">\(b\)</span> 是 <span class="arithmatex">\(a\)</span> 到 <span class="arithmatex">\(c\)</span> 的補數。</p>
|
||||
<p>這是因為原碼和二補數的相互轉換實際上是計算“補數”的過程。我們先給出補數的定義:假設 <span class="arithmatex">\(a + b = c\)</span> ,那麼我們稱 <span class="arithmatex">\(a\)</span> 是 <span class="arithmatex">\(b\)</span> 到 <span class="arithmatex">\(c\)</span> 的補數,反之也稱 <span class="arithmatex">\(b\)</span> 是 <span class="arithmatex">\(a\)</span> 到 <span class="arithmatex">\(c\)</span> 的補數。</p>
|
||||
<p>給定一個 <span class="arithmatex">\(n = 4\)</span> 位長度的二進位制數 <span class="arithmatex">\(0010\)</span> ,如果將這個數字看作原碼(不考慮符號位),那麼它的二補數需透過“先取反後加 1”得到:</p>
|
||||
<div class="arithmatex">\[
|
||||
0010 \rightarrow 1101 \rightarrow 1110
|
||||
@@ -3640,7 +3640,7 @@
|
||||
\]</div>
|
||||
<p>總結來看,“先取反後加 1”和“先減 1 後取反”這兩種運算都是在計算到 <span class="arithmatex">\(10000\)</span> 的補數,它們是等價的。</p>
|
||||
<p>本質上看,“取反”操作實際上是求到 <span class="arithmatex">\(1111\)</span> 的補數(因為恆有 <code>原碼 + 一補數 = 1111</code>);而在一補數基礎上再加 1 得到的二補數,就是到 <span class="arithmatex">\(10000\)</span> 的補數。</p>
|
||||
<p>上述 <span class="arithmatex">\(n = 4\)</span> 為例,其可推廣至任意位數的二進位制數。</p>
|
||||
<p>上述以 <span class="arithmatex">\(n = 4\)</span> 為例,其可被推廣至任意位數的二進位制數。</p>
|
||||
|
||||
<!-- Source file information -->
|
||||
|
||||
|
||||
Reference in New Issue
Block a user