Right way to show numbers in binary/hex/octal in your opinion?
rempas
rempas at tutanota.com
Sat Dec 25 21:12:33 UTC 2021
So I have this function that converts a number to a string and it
can return it in any base you want. However, for negative
numbers, the result may not be what you expected for bases other
than decimal if you have used "printf" or "wirtef". Let's say
that we want to convert then number -10 from decimal to hex.
There are two possible results (check
[here](https://www.rapidtables.com/convert/number/decimal-to-hex.html)).
The first one is negate the number and convert it to hex and then
add a "-" in front of the number. So the result will be: -a
(which is what my function does)
The second one is what "printf" and "writef" does which is using
2's complement. So in this case, we first convert the number to
binary using 2's complement and then we convert this number to
hex. In this example, `-10` to binary is `1111111111110110` which
is `fff6` in hex. However, for some reason "printf" and "writef"
return fffffff6 so go figure....
Here are the advantages of these two methods in my humble opinion:
First method:
1. Is is what my function does and I would prefer not to change
it obviously. Also implementing the other behavior, would need a
lot of work (and of course I will have to figure it out, don't
know how to do it) and it will make the function much slower.
2. It is easier on they eyes as it makes it more obvious to
understand if the number is signed or not and so what the
equivalent is in other systems.
Second method:
1. It is probably what people would expect and what makes
scientifically more sense as decimal was supposed to be the only
base that will make sense for humans to read hence be the only
base that has the "-" character.
Anyway, I don't even know why it will be practical useful to
print a number in another system so, what are your thoughts?
More information about the Digitalmars-d
mailing list