Comportamento do deslocamento à direita não assinado aplicado à variável de bytes

Considere o seguinte trecho de código java

byte b=(byte) 0xf1;
byte c=(byte)(b>>4);
byte d=(byte) (b>>>4);

resultado:

c=0xff
d=0xff

resultado esperado:

c=0x0f

quão? como b em binário1111 0001 após mudança à direita sem sinal0000 1111 conseqüentemente0x0f mas porque é0xff quão?