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值应该有前 8 位“a”,其余 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

怎么样

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) 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

我认为你想要的是这样的:

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了解按位移位运算符。

于 2012-12-05T09:33:44.717 回答
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 回答