While it does roll over so that it stores the lowest 8 bits of the number, it's only doing that for the signed integer range. For 2^31 and above it stores 255, but scripts would be more likely to take advantage of this behavior if it worked at least up to the uint32 max:

//var %i 10 , %val $calc(2^31-5) | while (%i) { bset &v 1 %val | echo -a %val -> $bvar(&v,1) | dec %i | inc %val }

For the negative portion of the signed-int range, it does like it does for other non-numerics, and returns 45 from the hyphen's codepoint:

//bset &v 1 -2 | echo -a $bvar(&v,1-)