& and ? used in code

return ((nunchuck_buf[5] >> 1) & 1) ? 0 : 1

The parentheses give the order of evaluation:
(nunchuck_buf[5] >> 1) evaluates first.
((nunchuck_buf[5] >> 1) & 1) is next
then the value of that expression is tested true/false (non-zero == true / zero == false)

You could write it out:

byte bit = nunchuck_buf[5] >> 1;
bit = bit & 1;
if (bit == 1)
  return 0;
else
  return 1;