Java整数运算

时间:2012-12-05 09:23:03

标签: java int concatenation

我的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

7 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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

答案 2 :(得分: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);

答案 3 :(得分:0)

怎么样

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

并阅读Java type conversion and promotions

答案 4 :(得分: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

答案 5 :(得分: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,为十六进制的20120001。

有关按位移位运算符,另请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

答案 6 :(得分: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 <&lt; 24)|(b <20)|(c <&lt; 16)|(d <&lt; 12)|(e <8)|(f &lt;&lt; 8)| g