Побитовые операции: Не зануляется последняя цифра - C (СИ)
Формулировка задачи:
нужно занулить числа меньше 5.
я проделал пока только для последней цифры.
Почему не зануляется последняя цифра?
#include <stdio.h>
void main(){
unsigned long raz, mask1 = 0xf,mask2=0x00f0, mask3=0x0f00, mask4=0xf000;
int a;
scanf("%x",&a);
raz=a&mask1;
if (raz<5) raz=0;
a=a&(a|raz);
printf("%x",a);
}Решение задачи: «Побитовые операции: Не зануляется последняя цифра»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
unsigned int number, i, sInt;
sInt = sizeof(int)*2;
scanf ("%x", &number);
for (i = 0; i < sInt; i++)
if (((number >> i*4)&0xf) < 0x5)
number &= ~(0xf << i*4);
printf("%x\n", number);
system("pause");
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и математическими операциями.
- Определение типа данных переменной
numberи её инициализация как беззнаковое целое число. - Определение типа данных переменной
iи её инициализация как целочисленный счётчик. - Определение переменной
sIntдля хранения размера памяти, выделяемой под один int тип данных в битах, с последующим умножением на два, так как в данном случае рассматривается 16-битный int тип данных. - Считывание числа с помощью функции scanf в переменную
number. - Организация цикла по всем битам числа
numberс помощью переменнойi. - Проверка каждого бита числа
numberна значение меньше 0x5 с помощью побитовой операции AND и сдвига на 4 позиции вправо с последующим побитовым сдвигом влево на 4 позиции и сохранением результата в переменнойnumber. - Вывод полученного числа с помощью функции printf.
- Остановка выполнения программы с помощью команды system(
pause). - Возврат значения 0 для завершения программы.