1

私の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

4

7 に答える 7

3
String yourString = "" + a + b + c + d + e + f + g;
int finalInt = Integer.parseInt(yourString);
于 2012-12-05T09:26:03.597 に答える
3
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

于 2012-12-05T09:36:20.240 に答える
1

忘れる

@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);
于 2012-12-05T09:32:25.077 に答える
0

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

于 2012-12-05T23:19:48.900 に答える
0

次の方法でこれを達成できます

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
于 2012-12-05T09:31:08.877 に答える
0

どうですか

String s = "" + a + b + c + d + e + f + g;
int concat = Integer.parseInt(s);

Java の型変換とプロモーションを読んでください。

于 2012-12-05T09:24:14.003 に答える
0

あなたが望むのは次のようなものだと思います:

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も参照してください。

于 2012-12-05T09:33:44.717 に答える