私のint
価値観:
int a= 0x02; int b= 1; int c= 2; int d = 0; int e = 0; int f = 0; int g= 1;
int
これらの整数を連結して単一の値を取得するにはどうすればよいですか? 結果int
値には、「a」の最初の8ビットと残りの各4ビットが含まれている必要があります??
何かのようなもの :2120001
私のint
価値観:
int a= 0x02; int b= 1; int c= 2; int d = 0; int e = 0; int f = 0; int g= 1;
int
これらの整数を連結して単一の値を取得するにはどうすればよいですか? 結果int
値には、「a」の最初の8ビットと残りの各4ビットが含まれている必要があります??
何かのようなもの :2120001
String yourString = "" + a + b + c + d + e + f + g;
int finalInt = Integer.parseInt(yourString);
int a= 0x02; int b= 1; int c= 2; int d = 0; int e = 0; int f = 0; int g= 1;
int res=((a&0xff)<<24)|((b&0xf)<<20)|((c&0xf)<<16)
|((d&0xf)<<12)|((e&0xf)<<8)|((f&0xf)<<4)|((g&0xf));
System.out.println(Integer.toHexString(res));
収量:
2120001
忘れる
@MichaelArdanに感謝します
String yourString = "" + b + c + d + e + f + g;
int finalInt = Integer.parseInt(yourString, 4) | (a << (6*2));
bcdefg を 4 進数として解釈し、a を末尾にシフトします。
(質問を読み間違えました)
int n = a;
int[] v = new int[] { b, c, d, e, f, g };
int p = 8;
for (int k : v) {
n |= (k & 0xF) << p;
p += 4;
}
System.out.println(n);
212001 を生成するには、必要です
((((((a*10)+b)*10+c)*10+d)*10+e)*10+f)*10+g
何が起こっているかを示します
a*1000000+b*100000+c*10000+d*1000+e*100+f*10+g
ただし、それはビット幅に関するあなたの声明と矛盾しています。
あなたが本当に欲しいのは 0x212001 であると結論付けます。
(((((((((((a << 4)+b) << 4)+c) << 4)+d) << 4)+e) << 4)+f) << 4)+g
またはもっと簡単に
(a << 24)|(b << 20)|(c << 16)|(d << 12)|(e << 8)|(f << 8)|g
次の方法でこれを達成できます
public static void main(String[] args) throws UnsupportedEncodingException {
int a = 5;
int b = 3;
int bLength = Integer.toBinaryString(b).length();
System.out.println("a = " + Integer.toBinaryString(a));
System.out.println("b = " + Integer.toBinaryString(b));
int c = (a << bLength) | b;
//System.out.println(c);
System.out.println("c = " + Integer.toBinaryString(c));
}
出力
a = 101
b = 11
c = 10111
どうですか
String s = "" + a + b + c + d + e + f + g;
int concat = Integer.parseInt(s);
Java の型変換とプロモーションを読んでください。
あなたが望むのは次のようなものだと思います:
public static void main(String[] args)
{
int a=2;
int b=1;
int c=2;
int d=0;
int e=0;
int f=0;
int g=1;
System.out.println(g+(f << 4)+(e << 8)+(d << 12)+(c << 16)+(b << 20)+(a << 28));
}
結果は 538050561 で、これは 16 進数で 20120001 です。
ビット単位のシフト演算子については、 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.htmlも参照してください。