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

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

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

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

Q&A

解決済

3回答

628閲覧

java 16進数から2進数

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2018/02/07 13:23

16進数の情報から2進数で考え1の時は■0の時は□とし図を完成させるプログラムについてです。下のプログラムように下から見ていく場合はできました。
public class Kimatsu6{
public static void main(String[] args){
int[] antenna={0x1FC2,0x0A82,0x070A,0x020A,0x022A,0x022A,0x022A};
for(int i=0;i<antenna.length;i++){

String hyouji=mod(antenna[i]); System.out.println(hyouji); System.out.println(); } } public static String mod(int a){ String m=" "; for(int i=0;i<13;i++){ if((a&0x1)==1){ m="■"+m; }else{ m="□"+m; } a=a>>1; } return m; }

}
今度は上から見ていこうと思いプログラムを作ってみましたが実行結果が正しい結果になりませんでした。
for(int i=0;i<13;i++){

if((a&0x1000)==1){ m=m+"■"; }else{ m=m+"□"; } a=a<<1; }

どこを直したらよいのでしょうか

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

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

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

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

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

guest

回答3

0

ベストアンサー

if((a&0x1000)==1){

では条件が絶対に成立しないのでは?

if((a&0x1000)!=0){

にするとか。

投稿2018/02/07 14:16

okrt

総合スコア366

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

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

swordone

2018/02/07 14:18

これですね。盲点でした。
退会済みユーザー

退会済みユーザー

2018/02/08 08:02

直したらできました。 なぜ==1だとだめなのでしょうか?
fuzzball

2018/02/08 08:08

if((a & 0x1000) == 0x1000) { これなら分かるのかな?
okrt

2018/02/08 13:40

試しに、if文の直前で(a&0x1000)の結果を表示してみるとわかりやすいでしょうか。 (a&0x1000)の結果は0か0x1000かの2通りになります。1にはなりません。 (a&0x1)の結果は0か1かの2通りになります。 この辺はJava限定の話ではないので、Javaの資料の解説でわかりにくければ、他言語や言語非依存の資料も視野に入れて「ビット演算」や「ビット演算子」で探してみると良いかもしれません。
退会済みユーザー

退会済みユーザー

2018/02/09 09:00

ありがとうございます!!
guest

0

つ0x1000→0x2000

投稿2018/02/07 13:55

hichon

総合スコア5737

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

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

0

16進数0x1000は2進数に直すと

0001 0000 0000 0000

となり、最上位ビットのマスクになりません。

下位12ビットでいいようなので、正しくは2進数で

0000 1000 0000 0000

なので、これを16進数に直して0x0800です。

投稿2018/02/07 13:55

編集2018/02/07 13:59
swordone

総合スコア20651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問