if((test & (1<<i))==1)

Das funzt so nicht. Endweder auf größer null testen oder auf (1<<i)

if((test & (1<<i)) > 0)
if((test & (1<<i)) == (1<<i))

Ein Semikolon zuviel?
for(uint8_t i = 0; i<16;i++;)