0

私が現在知っているように、以下は正しいです:

  • char 8ビット値(例:0 0 0 0 0 0 0 0)
  • 短い16ビット値(例:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
  • int32ビット値例000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

私は上記がばかげた証拠に聞こえることを知っていますが、私はすべてのステップを説明したいと思います。

したがって、値1と29があります。これらは、正しくない場合は両方とも8ビットです。

 1: 0 0 0 0 0 0 0 1
29: 0 0 0 1 1 0 0 1

これらは8ビットなので、次のことができます

char ff = (char) 1;
char off = (char) 29;

それで、私の2つの価値観について話しています。

これらの値を連結して、バイナリで129のようになります。000 0 0 0 0 1 0 0 0 1 1 0 0 1

私は現在やっています:

short concat = (short) (ff | off)

しかし、バイナリが285になるはずのときに、結果29を取得します。

32768 16384 8192 4096 2048 1024 512256128 64 32 16 8 4 2 1

0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1

地獄のイムがうまくいかないところ:(?

-コードソリューションの更新-

byte of= (byte) 29;
byte fm1 = (byte) 1;
char ph1 = (char) (fm1<<8 | of);

または短いph2=(short)(fm1 << 8 | of);

両方とも16ビットがあるので何が良いですか?

System.out.println((int)ph1);
4

2 に答える 2

3

ビットを左に8シフトする必要があります。

short concat = (short) (ff <<8 | off)

パイプはビット単位であるか、同じ場所に同じビットを配置することになります。場所に1を配置すると、最初の文字か2番目の文字のいずれかが1になります。

于 2013-02-11T20:49:55.430 に答える
1

charは2バイトです

バイトは1バイトです

byte ff  = (byte)  1;
byte off = (byte) 29;
short concat = (ff << 8)|off;
于 2013-02-11T20:50:41.440 に答える