質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

305閲覧

Javaの練習問題で質問があります。

aiueo19

総合スコア19

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/11/16 09:31

編集2017/11/16 13:48

・練習問題の内容
10進数の整数(10)10は、int型のビット列で表すと
(00000000000000000000000000001010)2 のように0と1を並べた表記になる。

この時一番右の1は
(00000000000000000000000000000010)2
であり、10進数で表すと、(2)10となる。また、一番右の1で左へ塗りつぶすと
(11111111111111111111111111111110)2
となり、10 進数で表すと (−2)10 となる。

そこで、int 型の整数を入力するとその整数をビット列で表したときの一番右の 1 と、一番
右の 1 で左に塗りつぶしたときの値の、2 つを10進数で表示するプログラムを書きなさい。

どこがわからないのかと言うと

『10進数の整数(10)10は、int型のビット列で表すと
(00000000000000000000000000001010)2 のように0と1を並べた表記になる。』
↑この節はわかります。

『この時一番右の1は』
↑一番右の1とはどれを指しているのでしょうか。追記:恐らく解決しました。(文字通り()内部の一番右の1のことのようでした)

『(00000000000000000000000000000010)2
であり、10進数で表すと、(2)10となる。また、一番右の1で左へ塗りつぶすと』
↑左へ塗りつぶすとは、どういう意味なのでしょうか。追記:恐らく解決しました。(1で左シフト?のことだろうと気づきました。)

『(11111111111111111111111111111110)2
となり、10 進数で表すと (−2)10 となる。』
↑(-2)10となるのはなぜでしょうか。追記:恐らく解決しました。(一番左のビットが1のときは、マイナスになるようです。)

解決したいことは
上記に記述した疑問点と 追記:上記の疑問点は解決しました。

『そこで、int 型の整数を入力するとその整数をビット列で表したときの一番右の 1 と、一番
右の 1 で左に塗りつぶしたときの値の、2 つを10進数で表示するプログラムを書きなさい。』

このプログラムを書く際にあたって
ビット演算子を使え、このサイトを見ろ、などの僅かなヒントでもいいので、ヒントになりそうなことを教えてほしいです。

よろしくお願い致します。

追記:int 型の整数を入力するとその整数をビット列で表したときの一番右の 1 と、一番
右の 1 で左に塗りつぶしたときの値の、2 つを10進数で表示するプログラムを書きなさい。

とのことですが、ここまでで「整数を入力するため、Scannerをインポート」「シフト演算子」「右シフト?左シフト?」「ループ」「奇数になったらループ処理終了」
ざっくりと検討が付きました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

塗りつぶすっていう意味が全部1にするってことなのかな・・・
奇数になったらループ処理終了・・・・というのはよくわかりませんが、

Java

1import java.util.Scanner; 2 3class Test{ 4 public static void main(String args[]) { 5 Scanner sc = new Scanner(System.in); 6 int _inputValue = sc.nextInt(); 7 int i = 0; 8 for( ; i < Integer.SIZE; i++) { 9 if((0x1 & _inputValue) != 0x0) { 10 break; 11 } 12 _inputValue = _inputValue >> 1; 13 } 14 int _ans = 0x0; 15 for( ; i < Integer.SIZE; i++) { 16 _ans = _ans | (0x1 << i); 17 } 18 System.out.println(_ans); 19 } 20}

こういうことかしら

投稿2017/11/16 15:07

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aiueo19

2017/11/17 09:40

丁寧なご回答をありがとうございます、助かりました。 早速試させてもらいました。 『int型の整数を入力するとその整数をビット列で表したときの一番右の1と、一番 右の 1 で左に塗りつぶしたときの値の、2 つを10進数で表示するプログラムを書きなさい。』 の後者については完璧に出力されており、感動しています。 ですが、前者が出力されず、現在解答を模索中です。 それでもだいぶ助かりました、本当にありがとうございます。
aiueo19

2017/11/17 10:32

>int型の整数を入力するとその整数をビット列で表したときの一番右の1を10進数で表示する これはInteger.lowestOneBit( i ) という、intの1のビットのうち、最も右にいる「1」だけ残して残りは全て「0」にする機能を使い、出力できました。 ですが、なぜか不要なものまで出力される始末に・・・。 お手数おかけしますが、もしお時間がありましたら新しい質問の方を見てやってくださると、嬉しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問