displaying a 3 digit clock time on a 4 digit 7 segment display
I tested your first code line and it outputs a right aligned 136 without colon at my display. (Said I have only a colon at the middle and no decimal points)

The 5 at the fist digit (and also the A at your third code line) must have been set somewhere beforehand. The function does not change the unused digit, so it will stay whatever you set it to beforehand (Even from before the last reset of the Arduino. The display doesn't reset with the Arduino). You can set the segments for that digit to zero (or set all segments to zero, to clear the complete display) before you show the decimal number.

About the colon: Here it is important on which position you start the printing of the number. The colon/decimal point bitmask, that you provide the function with, is seen from the starting position, that you provide. The middle colon of a 4 digit display is wired to the second digit. When providing 1 as the starting position, you start with the second digit. Thus the colon bitmask must set the most significant ("first") bit, to enable the middle colon, since it belongs to the first digit, that is processed by the function. Meaning:

position = 0 and bitmask = 0b10000000 --&gt; colon/decimal point at first digit on
position = 0 and bitmask = 0b01000000 --&gt; colon/decimal point at second digit on
position = 0 and bitmask = 0b00100000 --&gt; colon/decimal point at third digit on
position = 1 and bitmask = 0b10000000 --&gt; colon/decimal point at second digit on
position = 1 and bitmask = 0b01000000 --&gt; colon/decimal point at third digit on
position = 2 and bitmask = 0b10000000 --&gt; colon/decimal point at third digit on
position = 2 and bitmask = 0b01000000 --&gt; colon/decimal point at fourth digit on


The 0x80 &gt;&gt; 1 is just a different representation of your binary number. 0x80 is the hexadecimal form of the binary 0b10000000. The &gt;&gt; operator shifts the byte to the right, here by one digit. Thus:

0x80 &gt;&gt; 1 = 0b10000000 &gt;&gt; 1 = 0x40 = 0b01000000


So the code, that you found, enables the colon/decimal point at the second digit.


  tell me an easier way to construct a time


Easier it relative. I used such a display in a project to display a time and used two showNumberDecEx() calls; one for the minutes and one for the seconds:

display.showNumberDecEx(seconds, 0x00, true, 2, 2);
display.showNumberDecEx(minutes, 0x40, true, 2, 0);


Having directly minutes and seconds may make it easier for you. About the no-leading-zeros: Since the library always prints left to right, you need to handle that by yourself. But that is rather easy. One if statement to check, if the minutes are greater than 9 or not. Depending on that you set the position to 0 or 1.

display.showNumberDecEx(seconds, 0x00, true, 2, 2);
if(minutes &gt; 9){
    display.showNumberDecEx(minutes, 0x40, false, 2, 0);
} else {
    display.showNumberDecEx(minutes, 0x80, false, 1, 1);
}


You could put that into a function, so that you don't have to write this code multiple times.

Note: For my last code snippet to work, you should first clear the display (or optionally only the first digit), so that no number from before will be displayed there.