This may be "too shallow" but have you ever studied basic logic circuits?
Beyond that, you should pick a processor and study assembly language programming.
If you don't know this, assembly is where every "human readable" assembly instruction represents one (binary) machine code instruction. You can't do assembly programming without understanding what's going on inside the processor.
C++ is "abstract" and usually one C++ instruction is complied to several machine language instructions and you don't (usually) need to know what's going-on inside the chip.
And you can run the same C++ program on different chips even their internal machine code is different, as long as you have a compiler supports that the particular hardware.
The advantage to an Arduino over a "random" microcontroller chip" is the same as always... You get a complete board assembly with the bootloader installed so you don't need to buy a development board or a chip-programmer. (Some PIC chips may be equally-easy to use.)
I've never done assembly programming on the Arduino, but I'm pretty sure you can use the bootloader...
Here is the instruction set for the ATmega chip. It shows the assembly language "mnemonic" instructions along with the actual binary codes (produced by the assembler and loaded into the processor's memory).