Обращение к биту с/с++

программирование C++

Столкнулся с проблемой, при работе с функцией __cpuid. Мне необходимо определить модель и семейство процессора. Вызываю ф-цию, с такими параметрами:
int add[4];
__cpuid(add, 1);
В MSDN написано, что нужные мне данные будут лежать в 4-7 и 8-11 битах add[0]. Как мне обратится к ним и извлечь необходимую информацию?

Примечание:
Спасибо, зайти в MSDN, в описание ф-ции и скопировать код я тоже могу.
Меня интересует конкретная часть возможностей этой функции. Даже так: необходимость использования этой функции привела к вопросу, связанного и я использовал её как пример.
Так как обратится к определённому байту переменной?

Примечание:
извиняюсь: к определённому биту.

Примечание:
Спасибо, разобрался сам.
Ответы:
// cpuid.cpp
// processor: x86, x64
// Use the __cpuid intrinsic to get information about a CPU
Несмотря на то, что вы разобрались сами, отмечу, что доступ к отдельному биту можно получить двумя способами:
1) Использовать битовые поля (это фича C++, не уверен, есть ли она где то еще). В вашем случае это оптимальный вариант. Битовое поле - это структура, длинна полей которой задается вручную. Т.е пишем:
struct Foo
{
unsigned a : 5;
unsigned b : 10;
unsigned c : 15;
unsigned d : 2;
}
В итоге получаем структуру длинной 32 бита, т.е. 4 байта, как раз как int. А дальше возможна таая запись:
Foo f;
f.a //первые 5 бит
f.b //с 6-го по 15-й биты и т.д.
2) Использовать сдвиги и маску:
пусть нам необходим четвертый бит переменной foo
byte foo = 18; //00010010 в двоичной системе
byte mask = 16; //маска. 00010000 в двоичной системе
byte bar = (foo & mask) >> 4; // побитово перемножаем число на маску, остается только значащий бит, потом здвигаем на 4 бита вправо. получаем в bar его значение.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.