Created
September 9, 2025 13:15
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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