On 9/19/22 00:36, Alex Colomar wrote: > 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; > Oh, and I have extra zeros, but that's a bug I introduced today. Before that, the other one is still there. :/ > > 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 > > --