プロが教えるわが家の防犯対策術!

ある整数値を,負数を2の補数で表現する2進表記法で表すと最下位2ビットは"11"であった。10進表記法の下で,その整数値を4で割ったときの余りに関する記述として,適切なものはどれか。
ここで,除算の商は,絶対値の小数点以下を切り捨てるものとする。

ア:その整数値が正ならば3
イ:その整数値が負ならばー3
ウ:その整数値が負ならば3
エ:その整数値の正負にかかわらず0


という問題の余りの定義についての質問です。
問題のある整数値をxと書くと、
商が[|x÷4|] ([a]はaの小数点以下を切り捨てたもの)となるところまではいいのですが、
余りはx-[|x÷4|]×4という定義でよいでしょうか。

A 回答 (1件)

> 商が[|x÷4|]


> 余りはx-[|x÷4|]×4という定義でよいでしょうか。
ともに、(通常は) 誤りかと思います。


質問文の商の定義が、元の整数値が負数の場合に、あいまい あるいは 不適切なように思いますが…

条件(最下位2ビットは"11")を満たす整数値の代表値として、
7, 3, -1, -5 を使用するものとします。

「/」を整数除算の商、「%」を整数除算の余りの計算を表現するとして
7/4 = 1、7%4 = 7 - (1 * 4) = 3
3/4 = 0、3%4 = 3 - (0 * 4) = 3
-1/4 = 0、(-1)%4 = (-1) - (0 * 4) = -1
-5/4 = -1、(-5)%4 = (-5) - ((-1) * 4) = -1

元の整数値をx、整数除算の商をa、整数除算の余りをmとして
x/4 = a、x%4 = x - (a * 4) = m
となりますので、(通常は) 絶対値は付かないかと思います。

----
余りが負数になった場合は正数に変換する、という要件が入っている場合。
質問の内容からプログラムもされているかと思いますので、説明の一部にコードを含めてしまいますが、
if (0 > m)
m += 4;
で処理するのが無難かと思います。

元の整数値の代表値として、-5 を使用すると、
-5/4 = -1、(-5)%4 = -1
余りが負数なので、4を足して、
(-5)%4 = (-1) + 4 = 3

これを、商は絶対値(の小数点以下を切り捨てたもの) として処理しようとすると、
-5/4 = |-1| = 1、(-5)%4 = (-5) - (|-1| * 4) = (-5) - (1 * 4) = -9
となって、おかしなことになります。

このように、条件を満たす代表値を入れてみるのが、一番わかりやすいかと思います。
    • good
    • 0
この回答へのお礼

私の言う商、余りの決め方では-5÷4=1余り-9となり、toris_t様がおっしゃるように直感に反する答えになってしまいますね。
これからは疑問に思ったときはとりあえず具体例で実験してみることを心がけてみようと思います。
わかりやすい解説ありがとうございました!

お礼日時:2019/05/29 23:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!