一个关于数字算法的问题,可能有些难度,高手请进!分全给了.(40分)

  • 主题发起人 主题发起人 Great
  • 开始时间 开始时间
G

Great

Unregistered / Unconfirmed
GUEST, unregistred user!
需要这样一个算法:
1.a,b,c,d:byte;
2.a,b都用二进制进行运算。a:=00000101
b:=00000111;
---- ----

3.分别取a与b低位合并成c c:= 01010111;
4.然后再从c中取出任意4位组成一个新数,高位不满用0补足:
c:= 01010111 d:= 00011111
-- -- ------
ab cd abcbcd

请各位高手赐教!
 
>>3.分别取a与b低位合并成c c:= 01010111;
C:=(A Shl 4) or (B and $0F);

>>4.然后再从c中取出任意4位组成一个新数,高位不满用0补足:

定义函数GetBit,测试Value的第Bit位是否置位
function GetBit(Value:Integer;Bit:Byte):Boolean;
begin
Result:=(Value and (1 Shl Bit))<>0;
end;

定义函数SetBit,给Value的第Bit位置位
function GetBit(var Value:Integer;Bit:Byte):Boolean;
begin
Value:=Value or (1 Shl Bit);
end;

其他的代码自己写吧!
 

const
N:array[0..7] of Byte=($01, $02, $04, $08, $10, $20, $40, $80)

var
a,b,c,d:Byte

i:Integer;
Temp:array[1..4] of Byte;
begin
c:=(a shl 4)+b

d:=0;
for i:=1 to 4 do
if (a and N[Random(8)])>0 then Temp:=1 else Temp:=0;
d:=(Temp[1] shl 5)+(Temp[2] shl 4)+(Temp[3] shl 3)+(Temp[2] shl 2)+(Temp[3] shl 1)+Temp[4];
end;
 
更正:
<B>procedure SetBit(var Value:Byte;Bit:Byte);</B>

大概方法就是这样,细节自己搞定~~~
 
出题者已经说得清楚明白,只是翻译成pascal嘛!
 
const
N:array[0..7] of Byte=($01, $02, $04, $08, $10, $20, $40, $80)

procedure Func(a,b:byte
var c,d:Byte);
var
i:Integer;
Temp:array[1..4] of Byte;
begin
c:=(a shl 4)+b and $0F

for i:=1 to 4 do if (a and N[Random(8)])>0 then Temp:=1 else Temp:=0;
d:=(Temp[1] shl 5)+(Temp[2] shl 4)+(Temp[3] shl 3)+(Temp[2] shl 2)+Temp[3] shl 1)+Temp[4];
end;

 
1、2、3如下,4的看不明白
//BCB中,Delphi应该差不多吧
char a[9] = "00000101",b[9] = "00000111",c[9],d[9];
c[8] = '/0'
d[8] = '/0';
for(int i = 7;i >= 0;i-- )
{
if(i >= 4)
c = b;
else
c = a[4 + i];
}
//用随机数发生器得到要取的4位?
...

为了方便地输入输出Byte,最好再定义几个char和字符数组,
后者是前者的串形式。
不知对不对?
:)
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
634
import
I
后退
顶部