I was programming in C# and wanted to format an int in
hexadecimal. It may be that I should have used some library
function for that, but I decided to roll my own function for that
anyway, in my general utility class:
public static string FormatHexadecimal(int what)
{ if (what == 0) return "0";
string result = "";
bool signed = what < 0;
if (signed) what = -what;
for (;what != 0;what >>= 4)
{ int digit = what & 0x0000000F;
result = (digit < 10? '0' + (char)digit: 'A' + (char)(digit -
10)) + result;
}
return signed? "-" + result: result;
}
Looks correct, right? Yes.
But quess what? Op+ has a double meaning in C#, depending on
context it means either addition or string concatenation. If you
add two characters, it interprets it as a concatenation that
results in a string with two charactes. The correct way to do
what I tried is:
public static string FormatHexadecimal(int what)
{ if (what == 0) return "0";
string result = "";
bool signed = what < 0;
if (signed) what = -what;
for (;what != 0;what >>= 4)
{ int digit = what & 0x0000000F;
result = (char)(digit < 10? (int)'0' + digit: (int)'A' +
(digit - 10)) + result;
}
return signed? "-" + result: result;
}
You can imagine me confused when the first version returned way
too long and incorrect strings. Now, if I were programming in D,
this would not have happened. Using + always means an addition.
If one wants to concatenate, ~ is used instead.
So, ~ may be a bit confusing for newcomers, but there is a solid
reason why it's used instead of +, and it's because they have a
fundamentally different meaning. Good work, whoever chose that
meaning!