BASIC DOUBT

HELLO I WANT TO ASK WHAT THIS STATEMENT WOULD MEAN IN C++

string ans = "11";
ans += ans.back() ^ '0' ^ '1';
cout << ans << '\n';

I WAS WONDERING HOW CAN WE XOR CHARACTERS ??
PLEASE HELP

When asked to xor a char with an int, the compiler will “promote” that char to also be of int type, so we have:

ans += ans.back() ^ '0' ^ '1';

which is equivalent to:

ans += '1' ^ '0' ^ '1';

which in turn is equivalent to (after promoting each char to its corresponding int value - see the ASCII table for more details):

ans += 49 ^ 48 ^ 49;

i.e.

ans += 48;

As to how we can append this 48 (which is an int) to ans (which is a std::string), it uses this overload (see here):

basic_string& operator+=( CharT ch );

with CharT == char, so it just re-casts the int value 48 back to its char value ('0') and so appends the char '0' to ans, leaving ans with the final value "110".

2 Likes

TYSM Brother … you always help quickly…

2 Likes