Посмотреть конкретный c бит шестнадцатеричного числа? - PullRequest
0 голосов
/ 30 марта 2020

Я работаю над логикой c, которая научит меня, как работают биты и манипуляции с битами, и я пытаюсь просмотреть определенный c бит данного шестнадцатеричного числа. Например, f0f0 имеет следующее значение бита 1111000011110000. Итак, допустим, я пытаюсь просмотреть i-й бит, скажем, например, я выбираю 4-ю позицию, моя логика c должна вернуть 1. Я попытался сделать это, выполнив это logi c:

unsigned int desiredBit = hex & (1 << decimal);
      printf("%x\n", desiredBit);

Кажется, это работает в любое время, когда бит равен 0, но когда бит равен 1, он выплевывает кратное 10. Я предполагал, что выполнение << просто возьми меня на эту позицию, но я думаю, что я был неправ. Любое руководство о том, как исправить мою логи c?

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Фактически вы получаете кратное 2, т. Е. «Вес» этого конкретного бита, если он установлен, 0 в противном случае. Если вы просто хотите узнать, установлен он или нет, проверьте, равен ли этот вес значению! = 0 или нет:

Попробуйте

unsigned int setOrNot = (hex & (1 << decimal)) != 0;
0 голосов
/ 30 марта 2020

Вы получаете числовое значение числа только с тем битом, который установлен не точно 1, если только это не младший бит.

Например, с числом 0b11100101, если вы замаскируете второе MSB (0b11100101 & 0b01000000), результат будет 0b01000000, что равно 64 в базе 10.

Если вы хотите, чтобы результат был либо 1, либо 0, вы может выполнить !! для всей операции, т.е. printf("%d\n", !!(num1 & num2)); всегда будет либо 1, если бит был установлен, либо 0, если он не был.

...