#Javascript (ES6), 80 91 90 bytes
Javascript (ES6), 80 91 90 bytes
a=>[...a].reduce((p,c)=>c=='!'?p^255:c=='<'?p*2%256:c=='>'?p>>1:c=='@'?p/16|0+p%16*16:p,0)
Pretty much as short as it can get. Defines an anonymous function which takes the program as input.
- For
!, takesx XOR 255, as JS's~would considerxa 32-bit number. - For
<, multipliesxby 2 and takes the result mod 256. - For
>, truly shifts the bits ofx1 bit to the right. - For
@, floorsx/16and adds it tox%16*16.
Thanks to @vihan for suggesting the use of reduce to save a byte.