- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

D Edit

bitで、0か1かをとる配列が定義できる。
見ての通り、intから代入する場合などは、castが必要。
また、キャスト時、1以上は1になる模様。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void main(char[][] argv)
{
  void print(bit[] array)
  {
    printf("length = %d; ", array.length);
    printf("size = %d; ", array.sizeof);
    foreach (bit value; array) {
      printf("%d", value);
    }
    printf("\n");
  }
  
  bit[] array1;
  
  array1.length = 8;
  for (int i = 0; i < array1.length; i++)
    array1[i] = cast(bit) i;
  print(array1);

  // 拡張
  array1.length = 20;
  print(array1);

  // 縮小
  array1.length = 2;
  print(array1);
}

処理結果

length = 8; size = 8; 01111111
length = 20; size = 8; 01111111000000000000
length = 2; size = 8; 01

Delphi Edit

標準機能ではないが、標準ライブラリ(Classes)にTBitsがある。

Dと違いSizeが配列の長さなので注意。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
program main;

{$APPTYPE CONSOLE}
uses SysUtils, Classes;

  procedure Print(bits: TBits);
  var i: Integer;
  begin
    Write('size = ', bits.Size, '; ');
    for i := 0 to bits.Size - 1 do
      Write(Integer(bits[i]));
    Writeln('');
  end;
var
  Bits: TBits;
  i: Integer;
begin
  Bits := TBits.Create;
  try
    Bits.Size := 8;
    for i := 0 to Bits.Size - 1 do 
      Bits[i] := Boolean(i);
    Print(Bits);

    // 拡張
    Bits.Size := 20;
    Print(Bits);

    // 縮小
    Bits.Size := 2;
    Print(Bits);
  finally
    FreeAndNil(Bits);
  end;
end.

出力結果

size = 8; 01111111
size = 20; 01111111000000000000
size = 2; 01

  • 集合って長さ256までですけど相当に便利なビット配列と思います。 -- YT? 2005-07-15 02:24:08 (金)
  • うーん。サイズが動的に変更できないので、D相当ではないということで×にしときました。 -- TOBY 2005-07-15 13:23:46 (金)


Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2005-07-15 Fri 13:24:16 JST (4513d)