Как переписать этот код, используя битовое поле (структура) - PullRequest
0 голосов
/ 30 марта 2019

Мне нужно получить доступ к старшему, младшему и цифровому битам числа, которое подписано коротким шрифтом, используя структуры. Понятия не имею, был в Интернете, но мало информации о подписанном коротком.

Я пытался запустить его, используя некоторые функции, но моя задача - использовать битовое поле ...

    void print(signed short num)

    {
for (int i = 0; i < 16; i++)
    {
    if (num&(1 << i))
    cout << i << " bit is 1" << endl;
    else
    cout << i << " bit is 0" << endl;

}
cout << "Your number is:" << num << endl;

    }

    int main() {
signed short num;
cout << "Please, enter your number:";
cin >> num;
print(num);
if (num&(1 << 15))
    cout << "Your number is negative" << endl;
else
    cout << "Your number is positive" << endl;

return 0;
    }

1 Ответ

0 голосов
/ 30 марта 2019

Вы можете использовать комбинацию анонимных union и битовых полей для достижения желаемого поведения:

union bit_access {
    int16_t as_short;
    struct {
        uint8_t bit15 : 1;
        // Continue until :
        uint8_t bit0 : 1;
    };
};

 // You can then access individual bits using :
 bit_access b = { -1234 };
 std::cout << "bit 0 = " << (int) b.bit0 << std::endl;

Имейте в виду, что, если я правильно помню:

  • Размер unsigned short Не гарантируется, что 16
  • Битовое поле struct s не гарантируется для представления без заполнения, вам может понадобиться что-то вроде __attribute__((packed))__, которое зависит от компилятора.
...