It's more logical. The reason it's 12 is because the Romans were afraid of zeros. The "12" means either 0 hours or 12 hours after midnight while 1-11 mean 1-11 or 13-23 hours after midnight.
if (pm && numberOnClock != 12) hoursSinceMidnight = numberOnClock+12;
else /*am or 12pm*/
{
if (numberOnClock == 12 /*12am*/) hoursSinceMidnight = 0;
else /*1-11 am or 12pm*/ hoursSinceMidnight=numberOnClock;
}
If a "0" was on top, it would be
if (pm) hoursSinceMidnight=numberOnClock+12;
else /*am*/ hoursSinceMidnight=numberOnClock;
TL;DR: Swap the 0 and 12 on the clock face. The inner (AM) ring now has numbers 0-11 while the outer (PM) ring has numbers 12-23. Things now make sense. We should have done this centuries ago instead of manufacturing measuring instruments whose scale starts at 12 rather than 0.