2016-01-18 2 views
0

Для произвольного шестнадцатеричного числа, имеющего 12 цифр, какой самый быстрый способ установить значение n-й цифры? Например,java, задайте значения бит по шестнадцатеричному номеру

0x100000000000 

как установить 10-цифру 2, то есть, 102000000000.

После проверки Java документ, я думаю, что число может быть определено в Java, как

int hex = 0x100000000000; 

, и мне нужно преобразовать его в 0x102000000000. Я стараюсь избегать использования любых существующих классов, таких как BitSet, поскольку код должен быть написан как в java, так и в простом javascript. Спасибо

+0

Если это шестнадцатеричный код, это не 12-битное число, которое у вас есть, а 48-битное число. 12-разрядное число в шестнадцатеричном виде будет иметь длину 3 символа, например '0x100'. – AntonH

+0

Я удалил синтаксис java. Теперь это всего лишь шестнадцатеричное число в 12 бит. – CMZS

+1

@CMZS Вы должны оставить «0x» как минимум. Это сбивает с толку иначе. –

ответ

3

Вот как я мог бы сделать это на Java, используя побитовые операторы. Он должен быть очень похож на Javascript.

public static void main(String[] args) 
{ 
    long hex = 0x2222222222222222L; 

    System.out.printf("0x%x", replaceDigit(hex, 10, 1)); 
} 

public static long replaceDigit(long originalValue, int digitPosition, int replacementDigit) 
{ 
    // Clear the 4 bits (i.e. 1 digit) at the position requested 
    originalValue &= ~(0x0FL << digitPosition * 4); 

    // Now put the replacement value at the position requested 
    originalValue |= (long) replacementDigit << digitPosition * 4; 

    return originalValue; 
} 
+0

«digit» - это необычно запутанный выбор имени arg. pos/position, может быть? это определенно не цифра. – pvg

+0

Я уточнил имена аргументов –

+0

Большое спасибо. – CMZS

Смежные вопросы