Skip to content

Instantly share code, notes, and snippets.

@nervecenter
Created September 9, 2025 13:15
Show Gist options
  • Select an option

  • Save nervecenter/48d8f36841e9f5ce833f3a555e510f4b to your computer and use it in GitHub Desktop.

Select an option

Save nervecenter/48d8f36841e9f5ce833f3a555e510f4b to your computer and use it in GitHub Desktop.
An exam test question I found online, testing sub-addressing 64-bit long values and endianness.
#include <stdio.h>
#include <inttypes.h>
int main() {
uint64_t n[2] = {0xaabbccddeeff1122, 0x1122334455667788};
for (int i = 0; i < 2; ++i) {
printf("at address: %lx\t number: %lx\n", (size_t)&n[i], n[i]);
for (int k = 0; k < 8; ++k) {
uint8_t* c = ((uint8_t*)(&n[i])) + k;
printf("at address: %lx\t number: %x\n", (size_t)c, *c);
}
printf("\n");
}
}
// My guess:
// at address: <addr1> number: 0xaabbccddeeff1122
// at address: <addr1> number: 0xaa
// at address: <addr1>+8 number: 0xbb
// at address: <addr1>+16 number: 0xcc
// at address: <addr1>+24 number: 0xdd
// at address: <addr1>+32 number: 0xee
// at address: <addr1>+40 number: 0xff
// at address: <addr1>+48 number: 0x11
// at address: <addr1>+56 number: 0x22
// at address: <addr2> number: 0x1122334455667788
// at address: <addr2> number: 0x11
// at address: <addr2>+8 number: 0x22
// at address: <addr2>+16 number: 0x33
// at address: <addr2>+24 number: 0x44
// at address: <addr2>+32 number: 0x55
// at address: <addr2>+40 number: 0x66
// at address: <addr2>+48 number: 0x77
// at address: <addr2>+56 number: 0x88
// Actual
// at address: 7ffce6b4bae0 number: aabbccddeeff1122
// at address: 7ffce6b4bae0 number: 22
// at address: 7ffce6b4bae1 number: 11
// at address: 7ffce6b4bae2 number: ff
// at address: 7ffce6b4bae3 number: ee
// at address: 7ffce6b4bae4 number: dd
// at address: 7ffce6b4bae5 number: cc
// at address: 7ffce6b4bae6 number: bb
// at address: 7ffce6b4bae7 number: aa
// at address: 7ffce6b4bae8 number: 1122334455667788
// at address: 7ffce6b4bae8 number: 88
// at address: 7ffce6b4bae9 number: 77
// at address: 7ffce6b4baea number: 66
// at address: 7ffce6b4baeb number: 55
// at address: 7ffce6b4baec number: 44
// at address: 7ffce6b4baed number: 33
// at address: 7ffce6b4baee number: 22
// at address: 7ffce6b4baef number: 11
// Reason for difference: Endianness
// x86_64 is little endian so the lowest bytes come first
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment