#include #include typedef unsigned char byte; void show_bytes(void * start, size_t len){ printf("%lu bytes from %p:", len, start); int i; for(i = 0; i < len; i++){ printf(" %.2x", ((byte *) start)[i]); } printf("\n"); } void unsigned_demo(){ unsigned short us = 13; unsigned int ui = 13; unsigned long ul = 13; //show_bytes(&ui,4); printf("%hu (%lu bytes), %u (%lu bytes), %lu (%lu bytes)\n", us, sizeof(unsigned short), ui,sizeof(unsigned int), ul, sizeof(unsigned long)); show_bytes(&us, 8); show_bytes(&ui, 8); show_bytes(&ul, 8); unsigned short us2 = (unsigned short) ui; unsigned short us3 = (unsigned short) ul; unsigned int ui2 = (unsigned int) us; unsigned int ui3 = (unsigned int) ul; unsigned long ul2 = (unsigned long) us; unsigned long ul3 = (unsigned long) ui; printf("%hu, %hu, %u, %u, %lu, %lu\n", us2, us3, ui2, ui3, ul2, ul3); unsigned long ul4 = (unsigned long) INT_MAX*10; unsigned int ui4 = (unsigned int) ul4; unsigned short us4 = (unsigned short) ul4; printf("%lu, %u, %hu\n", ul4, ui4, us4); show_bytes(&ul4, 8); show_bytes(&ui4, 4); show_bytes(&us4, 2); } void signed_demo(){ int x = -65536; short s = (short) x; long l = (long) x; printf("%hi, %d, %ld\n", s, x, l); show_bytes(&s, 2); show_bytes(&x, 4); show_bytes(&l, 8); unsigned int y = (unsigned int) x; int z = (int) y; printf("%d, %u, %d\n", x, y, z); show_bytes(&x, 4); show_bytes(&y, 4); show_bytes(&z, 4); } int main() { printf("Unsigned int demo:\n"); unsigned_demo(); printf("\nSigned int demo:\n"); signed_demo(); return 0; }