From 4616a07abeae35162fe4bc14fad095098d993e0b Mon Sep 17 00:00:00 2001 From: crc Date: Tue, 23 Apr 2019 13:40:40 +0000 Subject: [PATCH] example: n:binary-rep correction for negative numbers FossilOrigin-Name: ede742661f927d96f9035edeb000140d3cb79be07cc1b51d8cf68d512e431dca --- example/StringToNumberWithBase.forth | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/example/StringToNumberWithBase.forth b/example/StringToNumberWithBase.forth index 6a09f4d..1fa3ce0 100644 --- a/example/StringToNumberWithBase.forth +++ b/example/StringToNumberWithBase.forth @@ -74,14 +74,16 @@ The `n:to-string` returns a representation of binary numbers, but not the actual bitwise representation. The next word takes care of this. ~~~ -:n:binary-rep (n-s) - [ s:empty buffer:set - dup n:negative? [ n:inc ] if - #32 [ dup n:negative? - [ dup n:odd? ] [ dup n:even? ] choose - [ $1 ] [ $0 ] choose buffer:add - #2 / ] times drop - buffer:start s:reverse - ] buffer:preserve ; +{{ + 'Selector var + :bit (f-c) [ $0 ] [ $1 ] choose ; +---reveal--- + :n:binary-rep (n-s) + dup n:negative? [ n:inc &n:odd? ] [ &n:even? ] choose !Selector + [ s:empty buffer:set + #32 [ dup @Selector call bit buffer:add #2 / ] times drop + buffer:start s:reverse + ] buffer:preserve ; +}} ~~~