C语言位运算
C语言没学好,位运算搞不明白,很是惭愧,有一问题请教兄弟们:表达式中C1..C8是常数,s1..s8是变量(常数、变量类型是16进制数)
#define C1 0x897E8120
#define C2 0xE894C465
#define C3 0x5671B3A6
#define C4 0x65488944
#define C5 0x48492458
#define C6 0x50540150
#define C7 0x76DBFAAF
#define C8 0x12165400
((((s4^s7)&C3)^s7)^C4) ^ (((s2^s8)&C5)^s8)==C1;
(((s6^s1)&C6)^s6)^ (((s3^s5)&C7)^s5^C8)==C2;
列出满足条件的s1..s8 第八章位运算没学。。。有空学完帮你。。:$ 今天看了下书。。。把C1...C8的16进制数换成2进制。。。&就是逐比特相与。。。同是1相与为1。。有0相与为0。。
^为异或运算。。。
好像还有逻辑与。。或。。和异或之间的公式。。忘了:$
我朋友说这样,兄弟试试~~
procedure TForm1.Button1Click(Sender: TObject);const
c1 = $2927907884;
c2 = $1347682640;
c3 = $3902063717;
var
s1,s6, X, Y: LongWord;
Cnt: Integer;
begin
//ShowMessage(IntToStr(High(LongWord)));
X := High(LongWord) div 2;
Cnt := 0;
Y := 0;
for s1 := 0 to X do
begin
for s6 := X downto 0 do
begin
if ((((s1 xor s6) and c2) xor s1)=c1) and
((((s6 xor s1) and c2) xor s6)=c3) then
begin
Memo1.Lines.Add(inttostr(s1)+'-'+inttostr(s6));
Inc(Cnt);
end;
end;
Inc(Y);
Caption := IntToStr(Y * 100 div X) + '%';
Application.ProcessMessages;
end;
ShowMessage(IntToStr(Cnt));
end; 今天晚上翻翻书,明天告诉你!! 原帖由 黑夜彩虹 于 2007-1-26 17:05 发表
procedure TForm1.Button1Click(Sender: TObject);
const
c1 = $2927907884;
c2 = $1347682640;
c3 = $3902063717;
var
s1,s6, X, Y: LongWord;
Cnt: Integer;
begin
//ShowMessage(IntToStr( ...
没通过
页:
[1]