20 фев 2020 conf :
lol-code или конвертер
в двоичный код + некоторые операции
shl - это умножение
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern int _4_bits (int);
int main(int argc, char *argv[]) {
int a, b, c;
if (argc == 1) {
fprintf(stderr, "Error. Usage:\nnot num\nor num num\nand num num\nxor num num\nshr num num\nshl num num\nconv num\n");
return 0;
}
if (!strcmp(argv[1], "not")) {
if (argc < 3) {
fprintf(stderr, "Error. Usage:\nnot num\n");
return 0;
}
a = atoi(argv[2]);
c = ~a;
c = _4_bits(c);
}
else if (!strcmp(argv[1], "or")) {
if (argc < 4) {
fprintf(stderr, "Error. Usage:\nor num num\n");
return 0;
}
a = atoi(argv[2]);
b = atoi(argv[3]);
c = a | b;
c = _4_bits(c);
}
else if (!strcmp(argv[1], "and")) {
if (argc < 4) {
fprintf(stderr, "Error. Usage:\nand num num\n");
return 0;
}
a = atoi(argv[2]);
b = atoi(argv[3]);
c = a & b;
c = _4_bits(c);
}
else if (!strcmp(argv[1], "xor")) {
if (argc < 4) {
fprintf(stderr, "Error. Usage:\nxor num num\n");
return 0;
}
a = atoi(argv[2]);
b = atoi(argv[3]);
c = a ^ b;
c = _4_bits(c);
}
else if (!strcmp(argv[1], "shl")) {
if (argc < 4) {
fprintf(stderr, "Error. Usage:\nshl num num\n");
return 0;
}
a = atoi(argv[2]);
b = atoi(argv[3]);
c = a << b;
c = _4_bits(c);
}
else if (!strcmp(argv[1], "shr")) {
if (argc < 4) {
fprintf(stderr, "Error. Usage:\nshr num num\n");
return 0;
}
a = atoi(argv[2]);
b = atoi(argv[3]);
c = a >> b;
c = _4_bits(c);
}
else if (!strcmp(argv[1], "conv")) {
if (argc < 3) {
fprintf(stderr, "Error. Usage:\nconv num\n");
return 0;
}
c = atoi(argv[2]);
c = _4_bits(c);
}
else {
fprintf(stderr, "Error. Usage:\nnot num\nor num num\nand num num\nxor num num\nshr num num\nshl num num\nconv num\n");
return 0;
}
printf("%08i\n", c);
return 0;
}
теперь доп модуль:#include <stdlib.h>
#define size_byte 8
int _4_bits (int buffer) {
typedef struct {
unsigned char bit_8:1;
unsigned char bit_7:1;
unsigned char bit_6:1;
unsigned char bit_5:1;
unsigned char bit_4:1;
unsigned char bit_3:1;
unsigned char bit_2:1;
unsigned char bit_1:1;
} local;
typedef union {
unsigned char temp;
local bits;
} bit;
bit test;
test.temp = buffer;
char temp[size_byte] = {'\0'};
int ret = 0;
for (int i = 0; i < size_byte; i++) {
if (i == 0) {
if (test.bits.bit_1 == 0) {
temp[i] = '0';
}
else {
temp[i] = '1';
}
}
if (i == 1) {
if (test.bits.bit_2 == 0) {
temp[i] = '0';
}
else {
temp[i] = '1';
}
}
if (i == 2) {
if (test.bits.bit_3 == 0) {
temp[i] = '0';
}
else {
temp[i] = '1';
}
}
if (i == 3) {
if (test.bits.bit_4 == 0) {
temp[i] = '0';
}
else {
temp[i] = '1';
}
}
if (i == 4) {
if (test.bits.bit_5 == 0) {
temp[i] = '0';
}
else {
temp[i] = '1';
}
}
if (i == 5) {
if (test.bits.bit_6 == 0) {
temp[i] = '0';
}
else {
temp[i] = '1';
}
}
if (i == 6) {
if (test.bits.bit_7 == 0) {
temp[i] = '0';
}
else {
temp[i] = '1';
}
}
if (i == 7) {
if (test.bits.bit_8 == 0) {
temp[i] = '0';
}
else {
temp[i] = '1';
}
}
}
ret = atoi(temp);
return ret;
}
канпеляция: скопировать эти коды в файл 1.c и 2.c иgcc 1.c 2.c -o prog.exe
а затем можно запустить в командной строке. прога кривая и выполняет мало операций, а так же работает только с 8 битами. увы.user@pc:/tmp/pr$ ./a.out
Error. Usage:
not num
or num num
and num num
xor num num
shr num num
shl num num
conv num
user@pc:/tmp/pr$ ./a.out not 1
11111110
user@pc:/tmp/pr$ ./a.out conv 1
00000001
user@pc:/tmp/pr$ ./a.out shr 2 1
00000001
shr - это делениеshl - это умножение
8 | 0 | 0 | 0 |
Для добавления комментариев необходимо авторизоваться