that certainly depends on you implementation. a 16 bit integer is a 16 bit integer, signed or unsigned. your maskings will still be the same.
pretend we're working with 4bit integers. not possible without bitfields, bit just pretend....
if we have
Code:
__int4 n = 1000b
unsigned __int4 m = 1000b
__int4 x = 1000b
unsigned __int4 y = 1000b
then
n & m & x & y always == true
now, if we have
Code:
__int4 x = 1000
__int4 y = random;
and
x & y == true
we know that y is negative.
but in this case
Code:
__int4 x = 1000
unsigned __int4 y = random;
and
x & y == true
we know that y is greater than 2^3 - 1.
orther wise, if false, y < 2^3 - 1
it's not so much the values you get. it's what the values you get mean.
the portability issues arise when you assume the size of integers. that's why it's best to use __intN when declaring "size critical" integers to ensure they are the size you need them to be across every platform.