k = n >> c means take value in n and bit shift it to right c times store value in k.
if(k & 1) means if k bit 0 is set print 1 else print 0. (& is and operation)
Lets say n has decimal value 5. In binary "00000000000000000000000000000101"
first round:
c=31
k=0. In binary "00000000000000000000000000000000" (n shifted 31 times. zeros filled from left)
k & 1 = 0 print 0
second round:
c=30
k=0. In binary "00000000000000000000000000000000" (n shifted 30 times. zeros filled from left)
k & 1 = 0 print 0
...
c count down in loop.
when
c=2
k=1. In binary "00000000000000000000000000000001" (n shifted 2 times. zeros filled from left)
k & 1 = 1 print 1
c=1
k=2. In binary "00000000000000000000000000000010" (n shifted 1 times. zeros filled from left)
k & 1 = 0 print 0
c=0
k=5. In binary "00000000000000000000000000000101" (n shifted 0 times.)
k & 1 = 1 print 1