A Program to View the Binary Representation of Integers

Don't panic - this program uses C features not explained in lectures yet.

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

void
print_byte(uint8_t *address) {
    int i;
    for (i = 7; i >= 0; i--)
        if (*address & (1 << i))
            printf("1");
        else
            printf("0");
}

void
print_bytes(uint8_t *address, int n, int big_endian) {
    int i;
    if (big_endian)
       for (i = 0; i < n; i++)
          print_byte(address + i);
    else
       for (i = n - 1; i >= 0; i--)
          print_byte(address + i);
    printf("\n");
}

int
main(int argc, char *argv[]) {
    if (argc < 2)
        return 1;
    long long ll = atoll(argv[1]);
    long l = ll;
    int i = ll;
    short s = ll;
    char c = l;
    printf("Bit pattern for %lld in these types:\n", ll);
    printf("%-10s", "char:");
    print_bytes((uint8_t *)&c, sizeof c, 0);
    printf("%-10s", "short:");
    print_bytes((uint8_t *)&s, sizeof s, 0);
    printf("%-10s", "int:");
    print_bytes((uint8_t *)&i, sizeof i, 0);
    printf("%-10s", "long:");
    print_bytes((uint8_t *)&l, sizeof l, 0);
    printf("%-10s", "long long:");
    print_bytes((uint8_t *)&ll, sizeof ll, 0);
    return 0;
}

Index