I like bitwise operators. Although I'm not aware of any pro's or con's regarding this method.
Keyinput = ((upkey() OR keystate(17)) || (downkey() OR keystate(31)) << 1 || (leftkey() OR keystate(30)) << 2 || (rightkey() OR keystate(32))<< 3)
To understand what's happening in the above code, you'll need to do some research on binary, bytes & bitwise operators.
REM To process the result of KeyInput, use a "Select - Case" technique.
Sync On
Sync Sleep 1
KeyInput As Byte
Do
CLS
Set Cursor 0,0
Print "fps: ", screen fps()
KeyInput = ((upkey() OR keystate(17)) || (downkey() OR keystate(31)) << 1 || (leftkey() OR keystate(30)) << 2 || (rightkey() OR keystate(32))<< 3)
Print " "
Print "KeyInput: ", KeyInput
Print "Bin$ KeyInput: ", RIGHT$(BIN$(KeyInput),8)
Print " "
fastSync
Loop