сложение слева от номера

0

Как мы можем делать добавление слева FF вместо 00? Например, мы имеем a = E8, нам нужно a = 0xFFFFFFe8

 0xFFE26C02 -> 0xFFE26C02
 0x000000e8 -> 0xFFFFFFe8
 0x100000e8 -> 0x100000e8
 0x001000e8 -> 0xFF1000e8

PS тип данных int32 или int64

  • 2
    Эти расчеты не выглядят в соответствии со мной.
  • 0
    какая структура данных? int или string?
Показать ещё 8 комментариев
Теги:

3 ответа

2
Лучший ответ

Вы можете использовать следующее, чтобы преобразовать все ведущие байты 0 в FF

int RevLeadingZeros(int number)
{
    if((number & 0xFF000000)==0)
        number |= 0xFF000000
    else
        return number;
    if((number & 0x00FF0000)==0)
        number |= 0x00FF0000
    else
        return number;
    if((number & 0x0000FF00)==0)
        number |= 0x0000FF00
    else
        return number;
    if((number & 0x000000FF)==0)
        number |= 0x000000FF
    else
        return number;
}
2

Я предполагаю, что ваша проблема заключается в том, как положить биты слева влево "1" в номере?

Вот мое решение:

Возьмем, например, номер 01001000 (как num):

  1. Сначала сделайте ~ num, и вы получите 10110111.
  2. Затем плюс 1, а ответ (~ num + 1) равен 10111000.
  3. Сделайте (~ num + 1) & (num), и вы получите 00001000.

Таким образом, результат (~ num + 1) & num заключается в том, чтобы получить самый правый "1" в номере.

Чтобы получить самый левый, выполните цикл, и условие:

while(num-(~num+1)&num)

В конце вы получите номер 01000000.

Таким образом, будет легко найти "0" справа налево "1".

Надеюсь, это поможет.

1

Без прямого вычисления вы можете просто перебрать каждый байт целого числа и заменить последний последовательный 00 FF.

Вы можете также OR целое число с маской, которая может быть легко построена с первым перемещением вашей целочисленной памяти.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню