我需要弄清楚,如何设置六进制数 0xffff ,它在动态下面的代码中用于按位AND。
int offsetData = address & 0xffff;
例如我需要这样的东西:
int offsetData = address & myHexaValue;
我有一个十进制int值,我需要用十六进制格式而不是 myHexaValue 。
这是我现在的状态。
int decimalShift = 16*8;
String myHexaValueString = Integer.toHexString(decimalShift);
现在..我可以将我的String hexa数转换为int hexa数,这样我就可以将结果输入 myHexaValue 了吗?
答案 0 :(得分:2)
您不需要转换它。没有十六进制数这样的东西。以十六进制写的数字是以基数16表示法编号的数字。我们通常使用基数10表示法,因此我们有0到9的数字,但是以十六进制表示法,你有0到F的数字。 所以只需做一个操作:
int offsetData = address & decimalShift;
编辑: 仅获得较低的16位使用掩码。 0xffff并执行&操作高16位将设置为0,低16位将保持不变。 这样:
int offsetData = address & decimalShift & 0xffff;
EDIT2: 要获得任何数字(0,...,31)位的掩码,您可以使用此功能:
private static int getMask(int numOfOnes) {
int i = 0x80000000;
i = i>>(32-numOfOnes-1);
i = ~i;
return i;
}
Pauls解释:"使用>>进行位移在移位之前用MSB的值填充最重要的位,因此在此代码中除了numOfOnes最低位之外的所有位都用1填充,之后数字被反转。"
答案 1 :(得分:1)
使用Integer.parseInt()
,指定基数16
:
int number = Integer.parseInt(myHexaNumber, 16);
答案 2 :(得分:0)
数字不是“十六进制”或“十进制”。这只是因为懒惰而使用的不精确拼写。数字表示十进制或十六进制是精确的。无需将int
从十进制转换为十六进制。事实上,无论您在代码中使用何种符号,它们都以二进制格式存储。符号相关的唯一点是用户交互或编码期间,如输入和输出数字,或在代码中指定常量。