正確に1ビットである必要がありますか?
これには、実際に組み込まれている VB データ型の Boolean を使用してみませんか。
http://msdn.microsoft.com/en-us/library/wts33hb3(v=vs.80).aspx
存在する唯一の理由は、true または false の 2 つの状態を持つ変数を定義できるようにするためです。
Dim myVar As Boolean
myVar = True
myVar = Flase
if myVar = False Then
myVar = True
End If
更新 (1)
OPからのさまざまな回答とコメントを読んだ後、OPが達成しようとしていることを理解しました。
他の人が言ったように、これらの言語のいずれかで使用できる最小単位は 8 ビットバイトです。これよりもビットサイズが小さいデータ型の順序はありません。
ただし、ちょっとした工夫と二項演算のちょっとした工夫で、そのバイトの内容を個々のビットとして参照することができます。
ただし、最初に 2 進数システムを理解する必要があります。
2 進数のすべての数値は、右から左に 2 の累乗です。
各列は前の列の 2 倍なので、次のようになります。
1 は 2 になり、2 は 4 になり、4 は 8 になります。
これを純粋に2進数で見ると、列には次のようにラベルが付けられます。
128 64 32 16 8 4 2 1 (右から左です)
これにより、次のことがわかります。
The bit at position 1 = 1;
The bit at position 2 = 2;
The bit at position 3 = 4;
The bit at position 4 = 8;
等々。
あなたが持っている最小のデータ型(バイト)でこのメソッドを使用すると、8ビットを1つの値にパックできます。つまり、1 つの変数を使用して、1 または 0 の 8 つの個別の値を保持できます。
したがって、1 バイトよりも小さくすることはできませんが、8 つの値を 1 つの変数にパックすることでメモリ消費を削減できます。
値をどのように読み書きしますか?
列の位置を覚えていますか? ビットシフトとビットマスクと呼ばれるものを使用できます。
ビットシフトは、
<<
と
>>
オペレーター
シフト操作は、シフトする列の数をパラメーターとして受け取ります。
例えば:
Dim byte myByte
myByte = 1 << 4
この場合、変数 'myByte' は 16 に等しくなりますが、実際にはビット位置 5 を 1 に設定したことになります。
mybyte = 0 = 00000000 = 0
mybyte = 1 = 00000001 = 1
mybyte = 2 = 00000010 = (1 << 1)
mybyte = 4 = 00000100 = (1 << 2)
mybyte = 8 = 00001000 = (1 << 3)
mybyte = 16 = 00010000 = (1 << 4)
0 から 16 までは、上記の右から左の列の値と等しいことに注意してください。
今説明したことを考えると、ビット 5、4、1 を 1 に設定し、残りを 0 に設定したい場合は、次のように簡単に使用できます。
mybyte = 25(16 + 8 + 1) = 00011001 = (1 << 4) + (1 << 3) + 1
あなたのビットをシングルトンに戻すには、逆にビットシフトするだけです
retrieved bit = mybyte >> 4 = 00000001
残念ながら、ビットシフト方式には小さな欠陥が 1 つあります。
前後にシフトすることで、設定済みのビットから情報を失う可能性が非常に高くなります。これを防ぐには、ビット シフト操作をビット マスクや「AND」&「」などのブール演算と組み合わせる方がよいでしょう。また'
これらが何であるかを理解するには、まず次のような単純な論理原則を理解する必要があります。
と
A と B の両方の入力が 1 の場合、出力は 1 です
これを図で説明すると
A B | Output
-------------
0 0 | 0
0 1 | 0
1 0 | 0
1 1 | 1
入力数値のビット位置が 1 で、入力数値 B の同じ位置が 1 である場合にわかるように、出力数値でその位置を保持します。それ以外の場合、ビットを破棄して 0 に設定します。 、次の例を見てください。
00011001 = Bits 5,4 and 1 are set
00010000 = Our mask ONLY has bit 5 set
私たちが実行する場合
00011001 AND 0010000
の結果が得られます
00010000
これを 5 だけシフトダウンできます
00010000 >> 5 = 00000001 = 1
したがって、AND を使用することで、バイト内の個々のビットの値が 1 かどうかをチェックする方法が得られます。
if ((mybyte AND 16) >> 1) = 1 then
'Bit one is set
else
'Bit one is NOT set
end if
前に示したように、右から左の列に 2 の異なる値を持つさまざまなマスクを使用することで、バイトからさまざまな特異値を簡単に抽出し、それらを単純なビット値として扱うことができます。
「OR」を使用して反対の方法で操作を実行することを除いて、バイトの設定は同じくらい簡単です
また
A または B 入力のいずれかが 1 の場合、出力は 1 です
これを図で説明すると
A B | Output
-------------
0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 1
例えば:
00011001 OR 00000100 = 00011101
ご覧のとおり、位置 4 のビットが設定されています。
ただし、これをすべて開始した基本的な質問に答えるには、VB で 1 バイト未満の解像度を持つデータ型を使用することはできません。絶対的なビット単位の精度が必要な場合は、圧縮アルゴリズムのいずれかを作成する必要があると思います。またはある種の暗号化システム。:-)