我的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
答案 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);
答案 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