Цитата:
Сообщение от T_r_D
И почему моё смещение не приводит к такому результату?
По сути я хочу первые 5 бит переместить в начало обнулив последним 3
.
|
Похоже, что при вычислениях все типы по умолчанию приводятся к результирующему типу, а он у тебя int. Поправьте меня, если я не прав. Тогда нужно делать так, если AM нужен int:
if (bitRead(buf[6],6) == 1){AP = 7; APV = 0; AM = (unsigned char)(buf[6] << 3);}
Цитата:
Сообщение от T_r_D
А что означает buf[6]^=1<<6 ?
|
1 смещается на 6 бит влево и логически (XOR) побитово складывается с buf[6]. То есть, если биты одинаковые, то результирующий бит будет 0, если разные то 1. Но похоже это не то, что нужно, так как, если в 7 бите buf[6] будет 0, то после этой операции там станет 1 и результат будет опять не тот.