2012-04-21 21 views
0

私は大きくて少し面白いレッスンを読んでいますendianness。擬似コードサンプルでは、​​longInt(4バイト)をビッグエンディアンからリトルエンディアンに変換する方法、またはその逆の方法を説明しています。16進ビット操作

Function Reverse (N:LongInt) : LongInt ; 
    Var B0, B1, B2, B3 : Byte ; 
    Begin 
    B0 := (N AND $000000FF) SHR 0 ; 
    B1 := (N AND $0000FF00) SHR 8 ; 
    B2 := (N AND $00FF0000) SHR 16 ; 
    B3 := (N AND $FF000000) SHR 24 ; 
    Reverse := (B0 SHL 24) OR (B1 SHL 16) OR (B2 SHL 8) OR (B3 SHL 0) ; 
    End ; 

コードはこのようなもので、最初の行から16進表現で問題があります。彼らはこれを行うことで最初のバイトをここからどのように抽出するのですか?

B0 := (N AND $000000FF) SHR 0 ; 

?何が操作ですか?

N AND $000000FF 

は何ですか?

バイナリ表現でANDとは何か分かりますが、16進表現はどうでしょうか?そして、私の驚きは、次の行ではすべて同じです。

ありがとうございます。

答えて

1

16進数字は、4つの連続する2進数字に相当します。 C < ==>1100。ビット単位の演算は、等価な2項表現で動作します。