Data update
This commit is contained in:
parent
81fd053722
commit
52a6ef48dd
10248 changed files with 63654 additions and 6775 deletions
37
Task/Twos-complement/Jq/twos-complement.jq
Normal file
37
Task/Twos-complement/Jq/twos-complement.jq
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
include "bitwise" {search: "."}; # see above
|
||||
|
||||
# Arithmetically add 1 to the non-negative integer represented by the
|
||||
# bit stream `stream`, in which the least significant bit is first.
|
||||
def plusplus(stream):
|
||||
foreach (stream, null) as $bit ({carry: 1};
|
||||
if $bit == null
|
||||
then if .carry == 1 then .emit = 1 else empty end
|
||||
elif .carry == 0 then .emit = $bit
|
||||
## .carry is now 1:
|
||||
elif $bit == 0 then {carry: 0, emit: 1 }
|
||||
else .emit = 0
|
||||
end )
|
||||
| .emit;
|
||||
|
||||
# input: a non-negative integer
|
||||
# output: the bit array (with most-significant bit first and with length $width)
|
||||
# corresponding to the twos-complement of the input integer, it being understood
|
||||
# that all but the ($width-1) least significant bits of the binary representation of . are dropped.
|
||||
def twosComplement($width):
|
||||
def rpad($width): ($width - length) as $l | . + [range(0; $l) | 0];
|
||||
if . < 0 then "input of twosComplement should be non-negative" | error
|
||||
else [flipbits( [limit($width; bitwise)] | rpad($width) | .[] )]
|
||||
| [limit($width; plusplus(.[]))]
|
||||
| reverse
|
||||
end;
|
||||
|
||||
def illustrate($width):
|
||||
"decimal: \(.)",
|
||||
"binary: \([bitwise] | reverse | join(""))",
|
||||
"twos-complement(\($width)): \(twosComplement($width) | join(""))",
|
||||
"";
|
||||
|
||||
( 3
|
||||
| illustrate(8)),
|
||||
(737894120670 # 0xABCDEABCDE9
|
||||
| illustrate(64))
|
||||
Loading…
Add table
Add a link
Reference in a new issue