計算方法を教えてください
2のN(=1..8) 乗 と Temp: Byte を And して
True または、 False を求める
以下のようにするとコンパイルできません。
if (IntPower(2, N - 1) and Temp) <> 0 then begin
end;
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 です。
エラーは出ないんですけど理解できていません。
Extend がわからないです
私の頭の中には、少数と整数しかないんですよ。
Extend とは大きな整数じゃないの?
round って 少数とかで、整数に丸めるためのものじゃぁ?
と、いうことは Extend って 少数なのかなぁ?
そのようなビット演算には、普通は shl を使います。
> 2のN(=1..8) 乗
var
b: cardinal;
...
b := 2;
if ((b shl n) and Temp) <> 0 then
というふうに。 shl は左ビットシフトです。
extended は型です。
ヘルプには
Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19〜20 10
function Power(const Base, Exponent: Extended): Extended;
とあります。Delphi では実数との and 演算はできません。
Extend って少数も、整数もあるんですね?
1.23456789×10^3 とかって場合でしょうか?
1234.56789 の少数ですが。
あと、3.6 x 10^-4951 .. 1.1 x 10^4932
どこから、このような範囲が出てくるのでしょうか?
間違えました。
function IntPower(const Base: Extended; const Exponent: Integer): Extended register;
ですね。extended は実数であり、整数ではないです。
実数 ←→ 虚数
整数 ←→ 少数
ですよね。
あ、そうか忘れてた。
シフト計算ですよね。
それで、全て解決しました。
質問は残ってますが、
Delphiと直接関係ないかも?
なので、解決しておきます。
もし、教えてくださる人がいれば
教えてください。
解決しても、閉じないようですから・・・
> どこから、このような範囲が出てくるのでしょうか?
コンピュータでどのように数を表現しているかにも依りますが、無限のメモリを
使っているわけではありません。ですから、表現できる数の範囲というものが
あるのです。extended 型は、最もこの範囲が広いもので、10バイトを
使って実数を保持しています。
>実数 ←→ 虚数
>整数 ←→ 少数
うーむ、微妙に違いますね。
実数 ←→ 複素数
整数 ←→ 実数
かなぁ・・・
ツイート | ![]() |