@Nikc7777

Как применить на практике битовую операцию NOT?

Вводим две строки с двоичным представлением, затем выводим результаты применения операции "~" к каждому числу. Задача решена, только через if else, но оператор "~" не применялся. Данный оператор применяется к целым числам. К типам данных int, short, char, можно ли его применить непосредственно к битам этих типов.
Вот код:
#include <stdio.h>
#include <stdlib.h>
#define BITS 8

char bin_inv(unsigned char *s);

int main(void){
   unsigned char val_1[BITS];
   unsigned char val_2[BITS];
   
   printf("Enter binary number: ");
   scanf("%s %s", val_1, val_2);
   bin_inv(val_1);
   bin_inv(val_2);
   printf("Inverted binary number: %s %s\n", val_1, val_2);
 return 0;
}
char bin_inv(unsigned char *s){
  char i;
    for(i = 0; i < sizeof(char) * BITS && s[i]; ++i){
       if(s[i]) == '0')
          s[i] = '1';
        else
           s[i] = '0';}
   return *s;
}
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 2
LoliDeveloper
@LoliDeveloper
Линейная алгебра как смысл жизни
Вообще можно через битовые маски заполнять char-ы в функции bin_inv(uchar* s) и к ним уже применять NOT. И точно также считывать обратно.
Память будешь экономить, но из-за масок по времени это дольше работать будет.
А как альтернативный вариант почему нет.
Ответ написан
Комментировать
@none7
s[i] = '0'+((~(s[i]-'0'))&1);
Но NOT тут притянут за уши, все обычно используют XOR.
*((*long long)s) ^= 0x0101010101010101LL;
И никакого цикла не надо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы