Marciokoko:
Sorry to ask this, I'm sure some curious George has asked it in the past but I'm not even sure how to ask it so I wasn't sure how to search for it either.
I understand the code I write, more or less. 
Just the same as I understand the objC and Swift code I write in x code.
And I know that somehow that code gets turned into 1 and 0's. And that those 1 and 0's are basically "turned" into on and off current flows.
But the whole part in the middle is still kinda hazy. Could someone explain how my code in the Arduino ide gets turned into something the chip can read? I have heard the chip comes with a bootloader "burned in" but I'm not sure what that means and how that converts my code into chip or machine code.
Well, since nobody actually answered your QUESTION, every microprocessor and microcontroller runs on machine code. Here's a VERY simplified example... imagine that you have a display device located at memory address 0x1000 and you want to display a string to it. You would write some C code like this:
uint16_t display = 0x1000;
const char *string = "Hello there";
uint8_t size = strlen (string);
for (x = 0; x < size; x++) {
display++ = *string++
}
Now, when compiled into machine language, it might look something like this (note this is Motorola HC11 code, but the idea is the same):
size dc.b 1 ;reserve 1 byte for "size"
string dc.b $48,$65,$6c,$6c,$6f,$20,$74,$68,$65,$72,$65,$00 ; string
ldab #0 ;initialize string length to 0
ldx #string ;point to string
strlen ldaa ,x ;get a byte
beq disp ;if zero, end of string
incb ;not zero, increment "b" register
inx ;increment pointer "x" register
bra strlen ;go again
disp stab size ;store string length
ldx #string ;point to string
ldy #$1000 ;point to display
loop ldaa ,x ;get a byte from string
staa ,y ;send it to display
inx ;increment source pointer
iny ;increment destination pointer
dec size ;decrement "size" (string length)
bne loop ;loop until size is zero, then done
Finally, when the assembler is compiled into binary, you get this:
00 // "size", a variable stored in memory
48 65 6C 6C 6F 20 //
74 68 65 72 65 00 // this is the string
C6 00 // C6 = "Load the B register with the byte that follows (00)"
CE 00 01 // CE = "Load the X register with the 16 bit word that follows (0x0001 the string)"
A6 00 // A6, 00 = "Load the A register with the byte that X points to"
27 04 // 27 = "Branch forward 4 bytes if result is zero"
5C // 5C = "Increment B, that is, B=B+1"
08 // 08 = "Increment X, that is, X=X+1"
20 F8 // 20 = "Branch backwards 8 bytes"
D7 00 // D7 = "Store the value of the B register in location 00"
CE 00 01 // CE = "Load X with the 16 bit value that follows (the string start)"
18 CE 10 00 // 18, CE = "Load Y with the 16 bit value that follows (the display address 0x1000)"
A6 00 // A6, 00 = "Load the A register with the byte that X points to"
18 A7 00 // 18, A7, 00 = "Store the A register contents to where Y points to (the display)
08 // 08 = Increment X (X=X+1)
18 08 // 18, 08 = Increment Y (Y=Y+1)
7A 00 00 // 7A = "Decrement what is at address 0x0000 (size)
26 F3 // 26 = "Branch backwards 13 bytes (loop) if size is not zero
Now, another example. Imagine you are a microprocessor and you know that the hex number "0x10" means "Pick up something from somewhere", 0x20 means "Put down something somewhere" and 0x30 means "decrement count" and "0x40" means "brick". You also know that if you see a "10" or "20" opcode, you will expect to see a "what" and a "where" immediately after (if not, you get confused and "crash"). However, if you see a "30" you know that only one thing follows... "what to decrement".
So I will take a piece of paper and write "144" on it and keep it by me. On another paper I will write this and hand it to you:
loop 10, 40, PILE
20, 40, BOX
30, COUNT
IF COUNT IS NOT 0, go back to loop
So, with this "program" you will pick up one brick from the pile and put in the box, count 144 down to 143, and since 143 is not zero you will move another brick. When you are done, you will have moved 144 bricks from the pile into the box and my piece of paper will have a "0" written on it (the paper is a "memory location" where "count" is stored).
Make sense?