計算するには?

解決


ガルル  2005-10-08 03:58:01  No: 17957

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

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

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


ウォレス  2005-10-08 04:14:12  No: 17958

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-08 04:25:51  No: 17959

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

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

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


えーと  2005-10-08 04:27:11  No: 17960

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

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

var
  b: cardinal;

...

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

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


えーと  2005-10-08 04:29:28  No: 17961

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-08 04:30:14  No: 17962

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

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

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


えーと  2005-10-08 04:32:01  No: 17963

間違えました。

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

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


ガルル  2005-10-08 04:33:42  No: 17964

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

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

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

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


えーと  2005-10-08 04:35:59  No: 17965

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

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


えーと  2005-10-08 04:40:45  No: 17966

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

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

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

かなぁ・・・


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加