#include #include /* бля какой же код охуенный */ /* ломается, если x = 0x8000000000000000 */ char* tobin(long int x) { size_t i = 0, j = 0; char buffer[64]; char *ret; char sgn = x < 0; x *= ((x > 0) << 1) - 1; for (; x; x >>= 1) buffer[i++] = '0' + (x & 1); ret = calloc(i + 1 + sgn, sizeof *ret); ret[0] = '-'; j += sgn; while (i) ret[j++] = buffer[--i]; return ret; } int main(int argc, char* argv[]) { long number; char *bin; if (argc != 2) { fprintf(stderr, "\x1b[91mError: Invalid amount of arguments\x1b[0m\n" "Usage: \x1b[92m%s \n\x1b[0m", argv[0]); return 1; } number = atol(argv[1]); if (number == 0) { puts("Binary for 0: 0"); return 0; } if (number == 0x8000000000000000) { puts("Aha, I see what you did there)"); return 1; } bin = tobin(number); printf("Binary for %li: %s\n", number, bin); free(bin); return 0; }