Linda, try this
NB. 16-"bit" signed binary numbers
NB. negative is - absolute value
sbinary =: _1:`1:@.(0 <: ])"0 * (16#2) #: |
value =: (2 p.~ |.)"1
NB. 2 7 1 8 p. y is +/ 2 7 1 8 * y ^ i. 4
sbadd =: ([: sbinary +&value)"1
sbmul =: ([: sbinary *&value)"1
sbneg =: ([: sbinary [: - value)"1
] 'a b' =: sbinary _5 3
0 0 0 0 0 0 0 0 0 0 0 0 0 _1 0 _1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
value a ,: b
_5 3
a (sbadd ,: sbmul) b
0 0 0 0 0 0 0 0 0 0 0 0 0 0 _1 0
0 0 0 0 0 0 0 0 0 0 0 0 _1 _1 _1 _1
value a (sbadd ,: sbmul) b
_2 _15
sbneg a ,: b
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 _1 _1
value sbneg a ,: b
5 _3
]f=: (?6 7$3){_1 0 1
0 _1 _1 0 1 _1 0
_1 0 _1 1 0 1 1
0 _1 0 0 1 _1 0
_1 1 1 0 _1 _1 1
1 _1 0 1 1 _1 0
0 _1 _1 _1 _1 1 _1
value f
_46 _69 _30 _21 42 _59
#. f
_46 _69 _30 _21 42 _59
sbinary value f
0 0 0 0 0 0 0 0 0 0 _1 0 _1 _1 _1 0
0 0 0 0 0 0 0 0 0 _1 0 0 0 _1 0 _1
0 0 0 0 0 0 0 0 0 0 0 _1 _1 _1 _1 0
0 0 0 0 0 0 0 0 0 0 0 _1 0 _1 0 _1
0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0
0 0 0 0 0 0 0 0 0 0 _1 _1 _1 0 _1 _1
value sbinary value f
_46 _69 _30 _21 42 _59
Kip
On 12/16/2011 9:16 PM, Linda Alvord wrote:
...
> My contention is that if we, the users, could get used to negative numbers,
> as we have learned to like _123.132j432.23 we would embrace these six
> binary representations:
>
> f=:0,.0,.(?6 7$3){_1 0 1
> f
> 0 0 _1 1 1 0 _1 _1 1
> 0 0 1 _1 0 1 1 _1 0
> 0 0 0 _1 _1 _1 _1 1 _1
> 0 0 0 0 _1 1 0 0 1
> 0 0 1 0 _1 _1 0 0 0
> 0 0 1 _1 1 _1 1 0 1
>
> The two columns of 0's are necessary for this to work correctly.
>
> Using place value and J we can "read" these numbers correctly
>
> f*($f)$|.2^i.9
>
> 0 0 _64 32 16 0 _4 _2 1
> 0 0 64 _32 0 8 4 _2 0
> 0 0 0 _32 _16 _8 _4 2 _1
> 0 0 0 0 _16 8 0 0 1
> 0 0 64 0 _16 _8 0 0 0
> 0 0 64 _32 16 _8 4 0 1
>
> +/"1 f*($f)$|.2^i.9
> _21 42 _59 _7 40 45
>
> And with no change in code, #. Gives the same results
>
> #.f
> _21 42 _59 _7 40 45
>
> It is only #: that must be changed. I would think this would be fairly
> straightforward if these representatives of negative binary numbers were
> adopted.
>
> #:#.f
>
> 1 1 1 1 1 0 0
> 0 1 0 0 0 1 0
> 0 1 1 1 1 0 1
> 1 0 1 0 0 1 0
> 0 1 1 1 0 1 1
> 1 1 0 0 0 1 0
>
> Since the current representation that #: provides has only positive numbers
> it is where the changes are necessary.
>
> Finally you would never see the displays above if you only consider positive
> integers.
>
> ]e=:#:i.7
> 0 0 0
> 0 0 1
> 0 1 0
> 0 1 1
> 1 0 0
> 1 0 1
> 1 1 0
> #.e
> 0 1 2 3 4 5 6
>
> So, my take on this is that the user must learn to accept a new way of
> understanding of what binary numbers look like. They will be unique. You
> can identify the sign by the leading element. If you can read the number in
> binary, it will be the same number but negative.
>
> I keep trying to explain, and as I do it is getting easier for me to
> understand what I am saying. That's I guess how you learn, by trying to
> teach.
>
> Linda
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm