人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JAVAの演算子に関しての質問です。
剰余演算子”%”ですが、これは-9%5は-4
であり、-9%-5も-4となります。
これは左オペランド(値)の符号だけを
元にして、結果の符合を決めるとの
ことですが、その理由をご存知の方が
おりましたら、教えて下さい。

●質問者: mimio17
●カテゴリ:コンピュータ 学習・教育
✍キーワード:Java オペランド 剰余演算子 演算子 符号
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● kmo2c
●20ポイント

http://www.yahoo.co.jp/

Yahoo! JAPAN

9割る5は答えが1で余りが4

検算すると

5*1+4=9

-9割る5は答えが-1で余りが-4

検算すると5*-1+(-4)=-9

-9割る-5は答えが1で余りが-4

検算すると-5*1+(-4)=-9

ってことでしょうねきっと。

◎質問者からの返答

ごくシンプルに考えればよかったのですね。

お付き合い下さいまして、ありがとうございます。


2 ● nissa0916
●20ポイント

http://hoge/

ずばり、数学的に割られる数の符号を考慮する必要がないからです。


まず、商×約数(以下Xとします)の絶対値は、常に割られる対象の数(以下Yとします)の絶対値以下の値になることを認識します。(1)

剰余は、商×約数の値から、割られる対象の数への差分です。(2)

以上の(1)(2)から、

割られる数が正の時は常にY≧Xであるため、剰余は常にゼロ以上、

割られる数が負の時は常にY≦Xであるため、剰余は常にゼロ以下、となります。

そのため、左オペランド(割られる数)の符号だけを参照すればよいのです。

(int)(-9/5)は-1なので、

(-1)*5+(-4)は-9で、

(int)(-9/-5)は1なので、

1*(-5)+(-4)は-9で、計算も合います。


(int)する時は切り捨て…という前提で考えています。

◎質問者からの返答

論理立てて、丁寧にご解答下さってありがとう

ございます。

>割られる数が正の時は常にY≧Xであるため、剰余は常にゼロ以上、⇒Y-Xは確実に0以上

>割られる数が負の時は常にY≦Xであるため、剰余は常にゼロ以下、⇒Y-Xは確実に0以下

ですね。(ただ復唱になりますが)


3 ● obache
●15ポイント

http://java.sun.com/

Java Technology

Java限定ってことじゃないですが、

-9 / 5 = -1 余り -4

-9 / -5 = 1 余り -4

ですね。

右オペランド×商+余り=左オペランド

となるには、余りの符号はそうなる必要がありますよね。

◎質問者からの返答

1番の方と同じ内容と解釈しました。

ご解答ありがとうございます。


4 ● dungeon-master
●15ポイント

http://www.hatena.ne.jp/ダミー:detail]

割り算の検算 商*除数+余り=被除数 が常に成り立つことと、

商*除数の絶対値が、被除数の絶対値より大きくなることはない、

という2つの理由からそうなります。


被除数が正

9/5 の場合は 商=1 なので、被除数9から除数*商(5*1)=5を引くと、余り4です。

9/-5 の場合は 商=-1 なので、被除数9から除数*商(-5*-1)=5を引くと、余り4です。


被除数が負

-9/-5 の場合は 商=1 なので、被除数-9から除数*商(-5*1)=-5を引くと、余り-4です。

-9/5 の場合は 商=-1 なので、被除数-9から除数*商(5*-1)=-5を引くと、余り-4です。


余りがある場合、被除数の符号と余りの符号が同じになります。

◎質問者からの返答

ご解答ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ