1

0 !=このコードで何をしますか:

#include <stdio.h>
int main()
{
    int i;
    for(i=0;i<8*5;i++)
        printf("%d",0 != ("HELLO"[i/8] & 1 << (~i&7)) );
    return 0;
}

これは単純な文字列からバイナリへの変換です。わかりました`("HELLO"[i/8] & 1 << (~i&7))が、パーツがわかり0 !=ません。取り外しても動作しません。

ビット演算を詳細に教えるサイトはありますか?

4

1 に答える 1

5
a != b

trueまたはfalseに相当する式です。Cには、とはありませんtruefalse、0は偽と見なされ、それ以外はすべて真と見なされます。などの式a != bは、falseの場合は0を返し、trueの場合は1を返します。%dは整数を出力するためのフォーマット文字列であるため、printf()はこの0または1を出力します。

このコンテキストでは、aは0であり、bは反対側の式の獣です。("HELLO"[i/8] & 1 << (~i&7)) 他の操作について少し詳しく説明します。

("HELLO"[i/8] & 1 << (~i&7))明確にするために括弧を追加する必要があります。

(("HELLO"[i/8]) & (1 << (~i&7)))

(〜i&7)はiを取り、その中のすべてのビットを反転し、次にすべてのビットを7のビットで反転します。

(1 << (~i&7)))

1を取り、左にシフトして〜i&7の場所に移動します。

a & b

テイクaANDSすべてのビットをb

いくつかのリンク:

http://en.wikipedia.org/wiki/Bitwise_operation

http://www.cprogramming.com/tutorial/bitwise_operators.html

http://msdn.microsoft.com/en-us/library/17zwb64t.aspx

于 2012-05-15T08:04:41.703 に答える