2013-05-14 19 views
8

Muszę zaimplementować metodę, która zapisuje bajt do obiektu ostream. Nazwijmy ten obiekt ostream obiektem strobj. Mam też bufor bitowy używany do przechowywania bajt danych, nazwijmy go:Co oznacza najmniej znaczący bajt?

char &bitter; 

w moim pliku nagłówka, mam to:

void writeThisByte(int sumInt); 

Instrukcje mówi, że muszę napisać "mniej znaczący bajt" int przekazanego do obiektu ostream, tj. strobj;

Jestem jednak zdezorientowany co do tego, co oznacza najmniej znaczący bajt.

Czy to oznacza, że ​​sprawdzasz, czy sumInt == 1? A jeśli tak, to czy napiszesz to na ostream?

strobj.write(&bitter, 1); 

nie jestem pewien :(

+0

Edytowałem twój kod, ponieważ uważam, że były dwa błędy ("mniej znaczący bajt" i "void riteThi", również zaktualizowałem formatowanie kodu.) Możesz go wycofać, jeśli uznasz to za niewłaściwe. "a" brakuje w 'Ieysu'? – Anthon

+0

po pierwsze, dziękuję za edytowanie mojego kodu ... po drugie "rytuał" został zrobiony celowo (tj. dla klasy;) ... po trzecie HAHA! tak, przypuszczam, że jest a :) .. długa historia o tym, że nie dostanę się do – Pangu

Odpowiedz

11

Wyobraźmy sobie całkowitą 32-bitowego, w którym każdy bit może wynosić 0 lub 1, np:

011101010101010101010101010110110 
         ^^^^^^^^ 

najmniej znaczący bajt znajduje się 8 bitów na prawej stronie.

Prawdopodobnie łatwiej jest zrozumieć, jeśli bierzesz przykład dziesiętny: z uwagi na liczbę 291023, cyfra "3" jest najmniej znaczącą, ponieważ jeśli ją zmienisz, będzie to miało najmniejszy wpływ na ogólną liczbę.

Aby uzyskać najmniej znaczący bajt, po prostu bitowe - I większe int z szesnastkowym 0xFF lub 255 dziesiętnym (1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255) - to usunie wszystkie bardziej signficant bitów i zachować 8 najmniej znaczących bitów ...

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

efekt jest tak:

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

Czy w & 255 nie skończyłoby się znowu x? – Pangu

+0

@TokugawaIeysu Weź kartkę papieru i zrób to ręcznie. Zobaczysz, co się stanie. – Bart

+0

@TokugawaIeysu: zobacz bardziej wyraźny przykład dodany powyżej ("afekt jest podobny do tego ..."). –

4

bardziej znaczących bitów na int są te, które przyczyniają się więcej na jej wartość. Najmniej znaczące bity przyczynić się mniej. Można je otrzymać zwykle przez logiczne jakiegokolwiek z całkowitą o 255 (bajt o wszystkich 1 S)

int lsb; 
lsb = SumInt & 255; 
+0

jeśli ty i to nie skończysz z lsb = SumInt ponownie? – Pangu

+0

Tylko jeśli wartość SumInt jest mniejsza lub równa 255 i większa niż -1 (przy założeniu, że najbardziej znaczący bit wskazuje znak jak na większości współczesnych procesorów). – Anthon

+0

dziękuję za wyjaśnienie Anthon! – Pangu

9

ustawień int składać się z kilku bajtów (zwykle 2, 4 lub 8 bitów). Podobnie jak w przypadku koncepcji najmniej signific bit ant, najmniej znaczący bajt to bajt, który ma mniejszą wagę w wartości całej liczby całkowitej. W zależności od endianness systemu, może to być pierwszy lub ostatni bajt pod względem pamięci.

Wyodrębnianie najmniej znaczącego bajtu, bitowo - ORAZ liczby o wartości bajtowej równej 1 s, i. mi. 255:

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

+1 za wzmiankę o endianess. – halex

4
  • Jeśli spojrzeć na liczbę dziesiętną, powiedzmy 507, najmniej znaczący t cyfra będzie 7. Zmiana na 6 lub 8 zmieni ogólną liczbę znacznie mniej niż zmiana 5.

  • Kiedy patrzysz na randkę, powiedzmy 14 maja 2013, tym najmniej znaczący część dnia (14) Pod względem chronologicznym zamawiania.

  • Patrząc na unsigned int 32-bitowe bajty (4), w której wartość liczby całkowitej (256^3)*b3 + (256^2)*b2 + 256*b1 + b0 do 4 bajtów b0, b1, b2, b3 The najmniej znaczący bajt znajduje się bajt b0.

można uzyskać najmniej znaczący bajt ze swojego int sumInt wykonując char c = sumInt & 0xFF; jak inni sugerowali.

+0

+1 do codziennych przykładów. – DevSolar