请教:位操作?(20分)

  • 主题发起人 主题发起人 xuekunli
  • 开始时间 开始时间
X

xuekunli

Unregistered / Unconfirmed
GUEST, unregistred user!
请教:我在内存某一段地址内保存如512个Byte,即应有512x8位二进制的位,
如何依次取出每一位(二进制位),如01111110,
依次取出0,1,1,1,1,1,1,0?
 
为什么要一位位的读?
除非你读了第一位的时候其他的位可能还会变化
如果不是的话你可以一次把全部读出来
然后再把BYTE转化成二进制数,OK了?
 
我需要对每一个二进制位。并对其进行一些操作。请各位多多指教![?]
 
能直接从内存地址去取每一bit吗?
 
DOS下倒是可以
 
Windows下可以吗?
 
Value 为读取的 bit;
代码:
var
  Buf: array[0..511] of Byte;
  I, J: Integer;
  B: Byte;
  Value: Byte;
begin
  for I := 0 to 511 do
  begin
    B := Buf[I];
    for J := 0 to 7 do
      Value := (B shr J) and (1 shl J);
  end;
end;
代码未测试.
 
用 AND(与) 和 SHR(右移)实现啊。
如:
01111110 01111110
AND 10000000 AND 01000000
------------ ------------
00000000 01000000 .............
SHR 7 SHR 6 .............
------------ ------------
0 1


 
多人接受答案了。
 
后退
顶部