Запись лекции

https://youtu.be/U80vYscbOgY

Графические материалы

Кликни на презентацию и листай вниз. Это интеграция PDF

Кликни на презентацию и листай вниз. Это интеграция PDF

Примеры кода из лекции

Перевод в двоичную систему

#include <stdlib.h>
#include <stdio.h>

void    print_bit_8(int dig)
{
    int i = 0;
    char rev[9];
    while (i < 8)
    {
        rev[7 - i] = dig % 2 + '0';
        dig /= 2;
        i++;
    }
    rev[i] = 0;
    printf("%s", rev);
    printf("\\n");
}

int main(int argc, char **argv)
{
    if (argc == 2)
    {
        int dig = atoi(argv[1]);
        printf("dig = %d\\n", dig);
        print_bit_8(dig);
    }
}

Битовое И "&"

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv)
{
    if (argc == 3)
    {
        unsigned int a = (unsigned int)atoi(argv[1]);
        unsigned int b = (unsigned int)atoi(argv[2]);;
        unsigned int res = a & b;
        printf("a \\t= \\t%d\\nb \\t= \\t%d\\nres\\t= \\t%d\\n", a,b,res);
    }

}

Битовое ИЛИ "|"

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv)
{
    if (argc == 3)
    {
        unsigned int a = (unsigned int)atoi(argv[1]);
        unsigned int b = (unsigned int)atoi(argv[2]);;
        unsigned int res = a | b;
        printf("a \\t= \\t%d\\nb \\t= \\t%d\\nres\\t= \\t%d\\n", a,b,res);
    }

}

Битовое Исключающее ИЛИ (XOR) "^"

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv)
{
    if (argc == 3)
    {
        unsigned int a = (unsigned int)atoi(argv[1]);
        unsigned int b = (unsigned int)atoi(argv[2]);;
        unsigned int res = a ^ b;
        printf("a \\t= \\t%d\\nb \\t= \\t%d\\nres\\t= \\t%d\\n", a,b,res);
    }
}

Побитовое отрицание (NOT) "~"

void    print_bit_32(int dig)
{
    int i = 0;
    char rev[33];
    if (dig > 0)
    {
        while (i < 32)
        {
            if (dig)
            {
                rev[31 - i] = dig % 2 + '0';
                dig /= 2;
            }
            else
            {
                rev[31 - i] = '0';
            }
            i++;
        }
    }
    else
    {
        dig = (dig + 1);
        while (i < 32)
        {
            if (dig)
            {
                rev[31 - i] = dig % 2 + '1';
                dig /= 2;
            }
            else
            {
                rev[31 - i] = '1';
            }
            i++;
        }
    }
    
    rev[i] = 0;
    printf("%s", rev);
    printf("\\n");
}

int main(int argc, char** argv)
{
    if (argc == 2)
    {
        unsigned int a = (unsigned int)atoi(argv[1]);
        int res = ~a;
        printf("a \\t= \\t%u\\n\\nres\\t= \\t%u\\n", a,res);
        print_bit_32(a);
        print_bit_32(res);
    }

Побитовый сдвиг "<<" \ ">>"

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv)
{
    if (argc == 2)
    {
        unsigned int a = (unsigned int)atoi(argv[1]);
        unsigned int sht = a >> 2;
        unsigned int sht2 = sht << 2;
        printf("a \\t= \\t%d\\nrsh\\t= \\t%d\\nlsh\\t = \\t%d\\n", a, sht, sht2);
    }

}

Элементарные способы кодирования текста с помощью XOR

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char** argv)
{
    int i = 0;
    int x;
    char *str_d;

    if (argc == 3)
    {
        int len = strlen(argv[1]);
        str_d = (char*)malloc(len + 1);
        x = atoi(argv[2]);
        while (i < len)
        {
            str_d[i] = argv[1][i] ^ x;
            i++;
        }
        str_d[i] = 0;
        printf("INPUT = \\t%s\\n", argv[1]);
        printf("OUTPUT = \\t%s\\n", str_d);
    }
}