重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

初心者です。初歩の時点で躓いてます。

・入力を促すメッセージを表示後、整数値を入力する
・シフト演算と和演算を用いて10倍する
・A×10=A×(8+2)=A×8+A×2
・結果を式と共に表示する

ほとんど答え書いているようなものじゃないかと思われてそうですが本当にわからないです。
出来ればコードと解説お願いしたいです。

A 回答 (2件)

import java.util.Scanner;



// 正直、「解けたから何?」って程度の問題
// こんなの解けてもプログラミングには役に立たない
// トリビア程度、である
// 教えてる人間のレベルが知れるし、こんなんやっててもプログラミングは上達せんだろう(そもそもJavaでやるような事か?)
// 可愛そうなのはつき合わされてる生徒である
// あまりにもくだらないレベルの問題なんで解説なんざしない

public class Main {
 public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  System.out.println("適当なメッセージ");
  int A = scanner.nextInt();
  int A0 = A << 3;
  int A1 = A << 1;
  System.out.println(A + "×10=" + A + "×(8+2)=" + A + "×8+" + A + "×2=" + (A0|A1));
 }
}
    • good
    • 0
この回答へのお礼

毎回ほんとに感謝です本当に助かります。
なぜそうなるかは自分なりに調べて考えてみますありがとうございます!

お礼日時:2021/07/17 23:50

> なぜそうなるかは自分なりに調べて考えてみますありがとうございます!



良い心がけ、です。
ただし、そんなに「考えてみます」ってほどの問題じゃないです。

> ほとんど答え書いているようなものじゃないか

その通り、だからです。
ただし、実は

> ・A×10=A×(8+2)=A×8+A×2

の意味が分かってない、って事でしょ。
いや、この意味は小学生でも分かるんだけど、「シフト」との関連性が分からん、と。

例えばね。二進数で

0001

ってのは1である、と。
ここで左シフトってのは全体を一つ左にズラす事です。

0010

これは2ですよね。つまり元の数の2倍である、と。
もういっちょ左シフトをかます。

0100

これは4です。と言う事は元の数の4倍になっています。
そして「2つ左にシフトした」って事は2^2かけた、ってのと同義になってるのは分かるでしょうか?

つまり、一般的には

・n個左シフトする <= 同義 => 2^n 掛ける

の関係がある。これを確かめてみて下さい。
例えば、二進数で3は

0011

ですが、二回左シフトすれば

1100

です。これは12で、3 * 2^2なわけで2^2の部分に注目すると確かに2左シフトしてる、って結果と一致しています。
いくつかこうやって実値で調べてみて下さい。そうすれば納得行くと思います。

と言う事は。左シフトで2の累乗は掛けられるけど生憎10は掛けられない。
だから次の式を持ってきたわけです。

・A×10=A×(8+2)=A×8+A×2

要するに「掛ける10」ってのを「2の累乗だけで書き記すにはどうすれば良いのか」。その解が上の式なのです。
つまり、

・A×8+A×2

ってのは

・A × 2^3 + A × 2^1

って事。要するに

・ A×10 = A × 2^3 + A × 2^1

と書ける。
と言う事は「なんかの10倍」ってのは「なんかを3回左シフトしたモノとなんかを1回左シフトしたものの合計」だ、って事。
従ってそれをそのままプログラミングすればいいわけです。それだけ。

でも無駄でしょ?
「ははぁなるほど」
かもしれんけど「へぇへぇへぇ」でしかなく、だからトリビアなんですよ。
そもそもこれがメンド臭いんで我々は高級言語を使ってるわけで。
これを一々やらなアカンのだったら高級言語を使っている意味がないのです。
だからくだらん、と。
そういう事です。
    • good
    • 0
この回答へのお礼

エスパーなのですか…?私が思ってたこと代弁されててびっくりですw
もうほんとに分かりやすいです!!ありがとうございます、、、

お礼日時:2021/07/18 00:41

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