我的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
我的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
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);
您可以通过以下方式实现此目的
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
我认为你想要的是这样的:
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了解按位移位运算符。
要产生 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