2015-01-29 4 views
0

Извините меня за мой английский. У меня есть ряд ИНТ значений, хранящихся в нем от 0 до 255. Для того, чтобы выяснить, что лежит в 7-битовом числе, я перевожу число в двоичную систему счисления, а затем в строке и проверьте строку:Побитовые операции с int

if (informationOctet_.substr(6, 1) == "0") 
{ 
... 
} 

возникли два вопроса,

  1. Если я использую Int (мы имеем 4 байта), а мой номер беззнаковое целочисленное значение в диапазоне [0, 255] Как определить, какой байт мне нужно учесть? Высокий байт?

  2. Я нашел нужный байт, откуда вы знаете содержимое, например, 6-го бита?

P.S. Я не использую заклинания, потому что делать с unsigned int.

СПАСИБО ВСЕМ, я проверяю Int номер:

int k = 3; 
for (int i = 0; i < 8; i++) 
{ 
    if (k & (1 << i)) 
    { 
     std::cout << 1; 
    } 
    else 
    { 
     std::cout << 0; 
    } 
} 

печати:

+3

2. если (п & (1 << 6)) {/ * бит 6 равен 1 * /} –

+1

Вам не нужно преобразовать в двоичный, есть битовые операторы, которые позволяют работать непосредственно на целое число. Также обратите внимание, что, возможно, вы не должны зависеть от того, что int == 4 байта, это не гарантируется стандартом. – Jon

ответ

2
  1. Это определение реализации и зависит от endianess от CPU. Если вы умны, то вы делаете проверку следующим образом: the_int & 0xFF, который всегда будет давать вам младший байт, независимо от того, будет ли он окончательным.

  2. byte & (1 << 6). Может быть. Обратите внимание, что подсчет бит равен нулю (как и массивы), поэтому вам нужно быть осторожным с условиями. «Бит 6» и «6-й бит» могут иметь разные значения. Всегда перечисляйте биты как 7 6 5 4 3 2 1 0, тогда это будет соответствовать коду C.

1

Вы можете выбрать "Чар" Тип данных для проверки. Он отвечает на ваш оба вопроса. Потому что тип данных символа имеет 1 байт (8 бит). И он также содержит целочисленные значения, поскольку char & int - совместимые типы данных.

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