Для заданных чисел выполнить действия, используя логические побитовые операции - C (СИ)
Формулировка задачи:
Исправить код.
Для заданных чисел выполнить действия, используя логические побитовые операции. Оформить вывод результата каждой операции в виде двоичных и десятичных кодов.
Значения, использованные в коде:
Число - 115; Выделить - 2 бит; Обнулить - 1,4 бит; Установить- 3 бит; Инвертировать - 7,8 бит.
Значения, на которые нужно исправить:
Число - 114; Выделить - 5,6 бит; Обнулить - 3,4 бит; Установить- 1,2 бит; Инвертировать - 8 бит.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
void binview(int n) // Функция перевода числа в двоичный код
{
int i;
int bin[9];
for(i=0;i<9;i++)
{
if((n>>i)%2==0) bin[8-i]=0;
else bin[8-i]=1;
}
for(i=1;i<9;i++) // Вывод числа в двоичном коде на экран
printf("%d",bin[i]);
return;
}
int main()
{
setlocale(LC_ALL,"Rus"); // Подключение русского языка
int A=115; // Исходное число
int result1,result2,result3,result4;
printf("Запись в сист.счисл. 10 - 2");
printf("\n\nИсходные данные: %d - ",A);
binview(A); // Перевод числа А в двоичный код
result1=A^2; // Операция A xor 2
printf("\nВыдел. 2 бита : %d - ",result1);
binview(result1); // Перевод полученного числа в двоичный код
result2=A&118; // Операция A and 118
printf("\nОбнул.1,4 битов: %d - ",result2);
binview(result2); // Перевод полученного числа в двоичный код
result3=A|4; // Операция A or 4
printf("\nУстан. 3 бита : %d - ",result3);
binview(result3); // Перевод полученного числа в двоичный код
result4=A^192; // Операция A xor 192
printf("\nИнверт.7,8 бит : %d - ",result4);
binview(result4); // Перевод полученного числа в двоичный код
return 0;
}Решение задачи: «Для заданных чисел выполнить действия, используя логические побитовые операции»
textual
Листинг программы
#include <stdio.h>
typedef unsigned char byte;
void printBin(byte val) {
int i;
for (i = 0; i < 8; ++i, val <<= 1) {
putc((val & 128) ? '1' : '0', stdout);
}
}
void print(const char text[], byte val) {
printf("%s: \tdec = %d\tbin = ", text, val);
printBin(val);
putc('\n', stdout);
}
int main() {
byte val = 114;
print("src", val);
print("5,6", val & 48);
print("3,4", val & 243);
print("1,2", val | 3);
print(" 8", val ^ 128);
return 0;
}
Объяснение кода листинга программы
- Программа выполняет действия с числами, используя логические побитовые операции.
- Тип данных переменной
val— byte, что означает, что она может содержать значения от 0 до 255. - Функция printBin() выводит двоичное представление числа
val. - Цикл в функции printBin() выполняет сдвиг числа
valвлево на 1 бит и проверяет, является ли самый старший бит числа 1. - Если самый старший бит числа 1, то выводится символ '1', иначе выводится символ '0'.
- Функция print() выводит текст и двоичное представление числа
val. - В функции main() создается переменная
valсо значением 114. - Вызывается функция print() для вывода текста
srcи значения переменнойval. - Вызывается функция print() для вывода текста
5,6и значения переменнойvalпосле применения побитового оператора AND с числом 48. - Вызывается функция print() для вывода текста
3,4и значения переменнойvalпосле применения побитового оператора AND с числом 243. - Вызывается функция print() для вывода текста
1,2и значения переменнойvalпосле применения побитового оператора OR с числом 3. - Вызывается функция print() для вывода текста
8и значения переменнойvalпосле применения побитового оператора XOR с числом 128. - Значение переменной
valне изменяется в функции main(). - Значение переменной
valне изменяется в функции print(). - Значение переменной
valне изменяется в функции printBin(). - Значение переменной
valне изменяется в функции main(). - Значение переменной
valне изменяется в функции main(). - Значение переменной
valне изменяется в функции main(). - Значение переменной
valне изменяется в функции main(). - Значение переменной
valне изменяется в функции main().