Побитовые операции: Не зануляется последняя цифра - 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 для завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д