I just wanted to add that you can actually avoid the cast if you use the arithmetic assignment operators. It's not faster or slower, just something that might be nice to know.
short permissions = 0755;
short requested = 0700;
short result = permissions;
result &= requested;