The warning from your compiler is telling you that your format specifier doesn’t match the data type you’re passing to it.
Try using %lx or %llx. For more portability, include inttypes.h and use the PRIx64 macro.
For example: printf("val = 0x%" PRIx64 "\n", val); (note that it’s string concatenation)