On 9/19/22 00:16, Alex Colomar wrote: > And it seems I also need some help with my own example, since I > discovered there's some sort of undefined behavior in it (just run > it several times and see; some work, but some do show weird stuff > for the cases where with modifiers that make the number wider than > unsigned int). If you find the undefined behavior, please show > me. I'll continue debugging, anyway. > This is the UB I'm experiencing: alx@dell7760:~/tmp$ ./a.out | head ....----....----....----....---- 0000000000000000000000000000000000000000000000011111111111110100000000000000000000000001011110; 0000000000000000000000000000000000000000000000011111111111110100000000000000000000000001011110; 00000001011110; 00000001011110; 00000001011110; 0000000000000000000000000000000000000000000000011111111111110100000000000000000000000001011110; 0000000000000000000000000000000000000000000000011111111111110100000000000000000000000001011110; ....----....----....----....---- 0b00000001011110; alx@dell7760:~/tmp$ ./a.out | head ....----....----....----....---- 00000001011110; 00000001011110; 00000001011110; 00000001011110; 00000001011110; 00000001011110; 00000001011110; ....----....----....----....---- 0b00000001011110; The first run is wrong, and the second one is correct. The relevant printf(3) lines are: printf("....----....----....----....----\n"); printf("%llb;\n", 0x5Ellu); printf("%lB;\n", 0x5Elu); printf("%b;\n", 0x5Eu); printf("%hB;\n", 0x5Eu); printf("%hhb;\n", 0x5Eu); printf("%jb;\n", (uintmax_t)0x5E); printf("%zb;\n", (size_t)0x5E); printf("....----....----....----....----\n"); printf("%#b;\n", 0x5Eu); Cheers, Alex --