例えば、
整数N:1024
整数M:19
と入力されたときに、
Nのiビット目からjビット目にMを挿入するプログラムを作成したいです。
整数N(2進数):10000000000
整数M(2進数): 10011
i=2, j=6
結果 :10001001100
この場合は、Mをiの数だけ左シフトし(1001100)
ビットORでそのまま挿入できますが、
整数N(2進数):10000011100
整数M(2進数): 10011
i=2, j=6
結果 :10001001100
Nがこのようになった場合、ORでは結果のようにならないので、
Mを挿入するNの部分を0に置き換えておき、
そこにMを挿入するようにしたいです。
10000011100
↓ i(2)ビット目からj(6)ビット目までをすべて0に置き換え
10000000000
この、0に置き換えというのはどのようにコードを書けば実現できるでしょうか?
ご教示いただけますと幸いです。
現在のコード↓
import java.util.Scanner;
public class test {
public static void main(String[] args) {
//整数NとMを入力
Scanner scanner = new Scanner(System.in);
System.out.println("整数Nを入力");
int scanX = scanner.nextInt();
System.out.println("整数Mを入力");
int scanY = scanner.nextInt();
//ビットの位置を指す値iを入力
System.out.println("ビットの位置(始まり)を指す値iを入力");
int scanZ = scanner.nextInt();
//メソッドを呼び出す
int xyz = insert(scanX, scanY, scanZ);
//返された結果(NにMを挿入した結果)を出力する
System.out.println();
System.out.println("Nのjビット目からiビット目にMを挿入すると:" + Integer.toBinaryString(xyz));
}
//Nのjからiビット目にMを挿入するメソッド
public static int insert(int x, int y, int z) {
int N = x;
int M = y;
int i = z;
//j = i + (Mの長さ - 1)
int j = i + (String.valueOf(Integer.toBinaryString(M)).length() - 1);
System.out.println("ビットの位置(終わり)を指す値jは" + j);
//スキャナで受け取った整数NとMを2進数に変換
System.out.println();
System.out.println("N(" + N + ")を2進数にすると:" + Integer.toBinaryString(N)); //2進数
System.out.println("M(" + M + ")を2進数にすると:" + Integer.toBinaryString(M)); //2進数
//Mをiの数だけ左にシフト
M = M << i;
System.out.println("M(2進数)をi(" + i + ")だけ左にずらすと:" + Integer.toBinaryString(M));
//ビット演算をする
//もし挿入したい部分が1だったら0にする
ここに挿入するNの箇所を0にするコードを書きたいです
//NにMを挿入(どちらかが1の場合1を返す)
int xyz;
xyz = N | M;
//結果を返す
return xyz;
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 工学 疑似乱数生成器 3 2023/01/05 02:06
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
java キーボード入力された値の...
-
ループ処理の際、最後だけ","を...
-
配列を逆順させて表示させる方...
-
コマンドライン引数の例外処理...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Ctrl+Zが入力されると終了する...
-
九九の表
-
JAVAのfor文で困っています。
-
javaの質問です。 数値を入力し...
-
要素数が10の配列で、乱数0~9...
-
javaです。 途中まで出来ている...
-
countに実行した回数をいれたい...
-
フィールド名やメソッド名に日...
-
3つの値の中間値を求める
-
Java、2の0乗~10乗の表示
-
javaプログラムについて
-
javaのエラーが回収できない
-
入力データ数を入力して、その...
-
Java キーボードから負の数が入...
-
コマンドプロンプトでキーを押...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
Java、2の0乗~10乗の表示
-
数値⇒漢数字変換 java
-
論理演算子”||”またはの入力方法
-
コマンドライン引数の例外処理...
-
JAVAのfor文で困っています。
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Java 入力した整数値の合計を、...
-
7つ数字を表示したら改行すると...
-
テキストボックスに入力された...
-
countに実行した回数をいれたい...
-
総称型ArrayList<E>への参照...
-
Randomメソッドの確率設定
-
Ctrl+Zが入力されると終了する...
-
学校で課題を出されて困ってい...
-
Java キーボードから負の数が入...
-
階乗の式
-
キーボードから10人分の点数を...
-
Java 配列<選挙>
おすすめ情報