You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently format casts the value to it's unsigned version and prints that. This is inconsistent with %d. Additionally, if this behaviour is wished, it can easily be accomplished by the user casting himself before formatting.
void main()
{
import std.format : format;
assert(format("%b",-17) == "-10001"); // failsassert(format("%o",-17) == "-21"); // failsassert(format("%x",-17) == "-11"); // failsassert(format("%X",-17) == "-11"); // fails
}
The text was updated successfully, but these errors were encountered:
Reading https://dlang.org/phobos/std_format.html#formattedWrite section 'b','d','o','x','X':
> [...] If the argument is a signed type and the FormatChar is d it is converted to a signed string of characters, otherwise it is treated as unsigned. [...]
So, clearly, the intended result for negative numbers is not a minus sign and magnitude, but two's complement.
bugzilla (@WalterBright) commented on 2021-03-01T19:55:38Z
Even, if the current specs state it, this is inconsistent behavior and while it's easy for a user to get the current behavior with a changed implementation it is not possible to get the wished for behavior with the current implementation. So I'm reopening this, but changing to enhancement.
bugzilla (@berni44) reported this on 2020-01-26T13:29:58Z
Transfered from https://issues.dlang.org/show_bug.cgi?id=20535
CC List
Description
Currently format casts the value to it's unsigned version and prints that. This is inconsistent with %d. Additionally, if this behaviour is wished, it can easily be accomplished by the user casting himself before formatting. void main() { import std.format : format; assert(format("%b",-17) == "-10001"); // fails assert(format("%o",-17) == "-21"); // fails assert(format("%x",-17) == "-11"); // fails assert(format("%X",-17) == "-11"); // fails }The text was updated successfully, but these errors were encountered: