2013-05-14 56 views
8

我必須實現一個將字節寫入ostream對象的方法。我們只需調用這個ostream對象strobj。我也有用於存儲數據的字節中位緩衝,讓我們稱之爲:最不重要的字節是什麼意思?

char &bitter; 

在我的頭文件,我有這樣的:

void writeThisByte(int sumInt); 

的說明說,我寫的int的「較低有效字節」被傳遞給一個ostream對象,即strobj;

但是,我對最不重要的字節意味着什麼感到困惑。

這是否表示您在查看是否sumInt == 1?如果是這樣,你是否把它寫到這樣的ostream

strobj.write(&bitter, 1); 

我不知道:(

+0

我編輯你的代碼,因爲我認爲有兩個錯誤('不太重要的字節'和'void riteThi'),我也更新了代碼的格式,如果發現它不合適,你可以將它回滾。 'Ieysu'中的'a'失蹤? – Anthon 2013-05-14 05:22:29

+0

首先,感謝編輯我的代碼......其次,「儀式」是有意完成的(即爲一個班級)......第三是HAHA!是的,假設是一個一個:) ..長的故事,我不會進入 – Pangu 2013-05-14 08:34:27

回答

11

設想一個32位整數,其中,每個比特可以是0或1,說:

011101010101010101010101010110110 
         ^^^^^^^^ 

的至少顯著字節在右手側上的8位。

如果你拿一個十進制的例子,可能會更容易理解:給定數字291023,'3'是最不重要的數字,因爲如果你改變它,你對整體數字影響最小。要獲得最低有效字節,只需按位與「0xFF」十六進制或255十進制(1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255)更大的int - 即可清除所有更signficant位和保存至少8位顯著...

int x = ...whatever...; 
unsigned char least_significant_bits = x & 255; 

的效果是這樣的:

011101010101010101010101010110110 // x 
000000000000000000000000011111111 //255 
result: 
000000000000000000000000010110110 // x & 255 
+0

wouldnt&255結束與X再次? – Pangu 2013-05-14 05:10:04

+0

@TokugawaIeysu拿一張紙,手工做。你會看到會發生什麼。 – Bart 2013-05-14 05:37:31

+0

@TokugawaIeysu:看到上面添加的更明確的例子(「影響是這樣的......」)。 – 2013-05-14 06:57:21

4

int的更顯著位是它的價值貢獻更多的人。最低顯著位貢獻較小。您可以通過正常的安定獲得這些整數與255(與所有1個字節)

int lsb; 
lsb = SumInt & 255; 
+0

如果你&它,不要以lsb = SumInt結束? – Pangu 2013-05-14 05:08:55

+0

僅當SumInt的值小於或等於255並大於-1時(假定最高位指示符號與大多數現代處理器一樣)。 – Anthon 2013-05-14 05:16:28

+0

謝謝你解釋安東! – Pangu 2013-05-14 08:47:20

9

int包括幾個字節(最有可能的2,4或8個字節)。到至少signific的概念類似ant位,最不重要的字節是整個整數值權重較小的字節。根據系統的字節順序,它可能是內存中的第一個或最後一個字節。

爲了提取最低有效字節,按位與與一個字節價值的1 s,i。即255:

int LSB = (someInteger & 0xFF); 
+6

+1提到endianess。 – halex 2013-05-14 04:57:15

4
  • 當你看一個十進制數,比如507,最小意義t數字將是7.將它改爲6或8會改變整體數量比改變5少很多。

  • 當你看到一個日期,按時間順序方面說這可能14,2013,在至少顯著部分是一天(14)。

  • 當你看一個無符號的32位int(4個字節),其中,所述整數的值是(256^3)*b3 + (256^2)*b2 + 256*b1 + b0爲4個字節b0, b1, b2, b3,所述至少顯著字節是字節b0

您可以通過執行char c = sumInt & 0xFF;正如其他人建議從你的int sumInt最不顯著字節。

+0

+1日常例子。 – DevSolar 2013-05-14 07:03:11