i ← bits ##.int u ⍝ Signed from unsigned integers. u ← bits ##.uns i ⍝ Unsigned from signed integers. These little functions "cast" between signed and unsigned integers. This is sometimes useful when dealing with native files. Note that as all of the primit- ive functions used in the coding are pervasive, they-just-work on arrays of higher rank and depth. Technical notes: For 8-bit (type 83) integers, the functions may be simplified to: uns←{256|⍵} ⍝ unsigned from signed byte. int←{¯128+256|128+⍵} ⍝ signed from unsigned byte. and for 16-bit short (type 163) integers, to: uns←{65536|⍵} ⍝ unsigned from 16-bit signed. int←{¯32768+65536|32768+⍵} ⍝ signed from 16-bit unsigned. Thus, in general we have: uns←{(2*⍺)|⍵} ⍝ unsigned from ⍺-bit signed. int←{↑⍵{(⍺|⍺⍺+⍵)-⍵}/2*⍺-0 1} ⍝ signed from ⍺-bit unsigned. Examples: 8 uns ¯3 to 3 ⍝ 8-bit unsigned. 253 254 255 0 1 2 3 16 uns ¯3 to 3 ⍝ 16-bit unsigned. 65533 65534 65535 0 1 2 3 12 uns ¯3 to 3 ⍝ 12-bit unsigned. 4093 4094 4095 0 1 2 3 8 int 8 uns ¯3 to 3 ⍝ 8-bit round trip. ¯3 ¯2 ¯1 0 1 2 3 16 int 16 uns ¯3 to 3 ⍝ 16-bit round trip. ¯3 ¯2 ¯1 0 1 2 3 12 int 12 uns ¯3 to 3 ⍝ 12-bit round trip. ¯3 ¯2 ¯1 0 1 2 3 4 hex 16 uns ¯3 to 3 ⍝ hex of uns ... fffd fffe ffff 0000 0001 0002 0003 4 hex ¯3 to 3 ⍝ ... same as hex of int. fffd fffe ffff 0000 0001 0002 0003 8 uns 8 int 2 3 4⍴256-⍳24 ⍝ ok for higher rank arrays. 255 254 253 252 251 250 249 248 247 246 245 244 243 242 241 240 239 238 237 236 235 234 233 232 8 int 8 uns ↑,∘⊂/-⍳5 ⍝ ok for nested arrays. ┌──┬───────────────┐ │¯1│┌──┬──────────┐│ │ ││¯2│┌──┬─────┐││ │ ││ ││¯3│¯4 ¯5│││ │ ││ │└──┴─────┘││ │ │└──┴──────────┘│ └──┴───────────────┘ See also: hex Back to: contents Back to: Workspaces