Склеить два полубайта из 64х бит

Тема в разделе "Микроконтроллеры AVR", создана пользователем Redfern89q, 21 сен 2019.

Метки:
  1. Redfern89q

    Redfern89q Нуб

    Привет всем! Дано:
    переменная 64 бита, нужно выдернуть с нее (отсчет с младшего) 8..12 бит и 61..63 бит

    вытаскиваю без проблем:
    Код (C++):
        unsigned long long int scale = 0b0101111111111111111111111111111111111111111111111111100011111111;
       
        unsigned char a = 0x00;
        unsigned char b = 0x00;
        unsigned char c = 0x00;
       
        a = (scale >> 8) & 0b00011111;
        b = (scale >> 61)
    как теперь их склеить в один байт? Говорю сразу, что
    Код (C++):

    c = a | (b >> 4)
     
    не помогает
     
  2. DetSimen

    DetSimen Спамовредитель Модератор

    дак, наоборот надо. c = (a<<4) | b;
     
    Asper Daffy, issaom и SergeiL нравится это.
  3. SergeiL

    SergeiL Гуру

    А одного "unsigned long" не хватает?
     
  4. DetSimen

    DetSimen Спамовредитель Модератор

    Оно будет 32 бита, а ему надоть 64.
    ТС, есть спицальный тип uint64_t еслишто
     
    SergeiL нравится это.
  5. SergeiL

    SergeiL Гуру

    Ну да, тупанул с утра.
     
  6. Asper Daffy

    Asper Daffy Гуру

    Вроде, сдвиг на 5, а не на 4 - нет?
     
  7. DetSimen

    DetSimen Спамовредитель Модератор

    Если полбайта, то 4. Наерна. Проснеца ТС, спросим у него
     
  8. Asper Daffy

    Asper Daffy Гуру

    Так ТС, похоже, гуманитарий. Словами говорит про полубайты, а в коде пишет 3 и 5 битов. Гуманитарии - оне ж всё образно говорят :)))

    А спрашивать ... ну, я точно не буду - мне пофиг :)
     
  9. parovoZZ

    parovoZZ Гуру

    ну ему же с 8-ого по 12-ый байт надо выдернуть. Значит 5 бит.
     
  10. ostrov

    ostrov Гуру

    А порубить на байты и с ними извращаться?