2016-11-24 4 views
0

Скажем, у нас есть 11101111, хранящийся в адресе address, как бы добавить первые 4 бита к последним 4 битам?Арифметика бит в C

Мой проф показал нам, что мы можем сделать это (*address)/16 + (*address)%16, но я не понимаю, почему он работает. Может кто-нибудь объяснить, откуда взялись деление и по модулю с 16?

+0

2^4 = 16 - деление на 16 эквивалентно смещению последних четырех бит. – nneonneo

+0

Вычислить бинарные результаты * a/16 и * a% 16. –

+0

Вы должны узнать немного больше о двоичных и числовых основаниях вообще –

ответ

1

@VanGo, см. Для выполнения операции над битами, вы должны сначала изучить побитовый оператор.

Я объясняю вашу проблему здесь.

11101111 (находится в двоичной форме) и эквивалентно 239 (в десятичной форме). Теперь вам нужно добавить 1110 в 1111. Чтобы получить эти две пары из 4 бит от 11101111, вам необходимо выполнить побитовое управление на 11101111.

Чтобы получить более высокий 4 бит, сдвиг 11101111 четыре раза слева направо ,

* адрес >> 4: - равно * адрес/16

внутренне компилятор новообращенный * адрес >> 4 в (* адрес)/(2 ПР 4).

Чтобы получить более низкие 4 бита, выполните (* адрес) & 0x0f или (* адрес)% 16. Обе операции очистят все биты, кроме более низких 4 бит.

printf(".....%d\n",(((*address)>>4) + ((*address)&0x0f))); 

надеюсь, что это вам поможет.