計算するには?

解決


ガルル  2005-10-07 18:58:01  No: 17957  IP: 192.*.*.*

計算方法を教えてください

2のN(=1..8) 乗  と Temp: Byte を And して
True または、 False を求める
以下のようにするとコンパイルできません。

if (IntPower(2, N - 1) and Temp) <> 0 then begin
end;

編集 削除
ウォレス  2005-10-07 19:14:12  No: 17958  IP: 192.*.*.*

procedure TForm1.Button1Click(Sender: TObject);
var
  N,Temp :Byte;
begin
  N := 5;
  Temp := 16;

  if (Round(IntPower(2, N - 1)) and Temp) <> 0 then
    Memo1.Lines.Add('true')
  else
    Memo1.Lines.Add('false');
end;

IntPower の  戻り値  は  Extended  です。

編集 削除
ガルル  2005-10-07 19:25:51  No: 17959  IP: 192.*.*.*

エラーは出ないんですけど理解できていません。

Extend がわからないです
私の頭の中には、少数と整数しかないんですよ。

Extend とは大きな整数じゃないの?
round って  少数とかで、整数に丸めるためのものじゃぁ?
と、いうことは  Extend って  少数なのかなぁ?

編集 削除
えーと  2005-10-07 19:27:11  No: 17960  IP: 192.*.*.*

そのようなビット演算には、普通は shl を使います。

> 2のN(=1..8) 乗

var
  b: cardinal;

...

  b := 2;
  if ((b shl n) and Temp) <> 0 then

というふうに。 shl は左ビットシフトです。

編集 削除
えーと  2005-10-07 19:29:28  No: 17961  IP: 192.*.*.*

extended は型です。

ヘルプには

Extended  3.6 x 10^-4951 .. 1.1 x 10^4932  19〜20  10

function Power(const Base, Exponent: Extended): Extended;

とあります。Delphi では実数との and 演算はできません。

編集 削除
ガルル  2005-10-07 19:30:14  No: 17962  IP: 192.*.*.*

Extend って少数も、整数もあるんですね?

1.23456789×10^3 とかって場合でしょうか?
1234.56789 の少数ですが。

あと、3.6 x 10^-4951 .. 1.1 x 10^4932
どこから、このような範囲が出てくるのでしょうか?

編集 削除
えーと  2005-10-07 19:32:01  No: 17963  IP: 192.*.*.*

間違えました。

function IntPower(const Base: Extended; const Exponent: Integer): Extended register;

ですね。extended は実数であり、整数ではないです。

編集 削除
ガルル  2005-10-07 19:33:42  No: 17964  IP: 192.*.*.*

実数  ←→  虚数
整数  ←→  少数
ですよね。

あ、そうか忘れてた。
シフト計算ですよね。
それで、全て解決しました。

質問は残ってますが、
Delphiと直接関係ないかも?
なので、解決しておきます。

もし、教えてくださる人がいれば
教えてください。
解決しても、閉じないようですから・・・

編集 削除
えーと  2005-10-07 19:35:59  No: 17965  IP: 192.*.*.*

> どこから、このような範囲が出てくるのでしょうか?

コンピュータでどのように数を表現しているかにも依りますが、無限のメモリを
使っているわけではありません。ですから、表現できる数の範囲というものが
あるのです。extended 型は、最もこの範囲が広いもので、10バイトを
使って実数を保持しています。

編集 削除
えーと  2005-10-07 19:40:45  No: 17966  IP: 192.*.*.*

>実数  ←→  虚数
>整数  ←→  少数

うーむ、微妙に違いますね。

実数  ←→  複素数
整数  ←→  実数

かなぁ・・・

編集 削除