Yes, source code is compiled by a compiler to a low-level language. Depending on the language of the source code, "low-level" can mean several things.
In Java, source code is compiled to byte code (a class file). Byte code is not machine code. It can't run as is on the hardware. It must be interpreted by the Java virtual machine (JVM). The JVM emulates the hardware for the byte code, just like virtualization technologies (VMWare, Virtual PC, Zen) does for guest operating systems. The JVM is written in C, and it does run natively on the hardware. The same goes for .NET languages, Perl, Python, PHP, etc. They're all interpreted languages.
In C and C++, gcc, the GNU compiler, compiles source code into machine that's specific to your machine. Different machines have different instruction sets (SPARC, MIPS, IA32, x86-64, PowerPC). You have to download the right gcc port for your machine and OS, since operating systems also use different file formats (ELF in linux and EXE in windows).
The byte code in Java resembles assembly language. The code is still human readable, but a bit more cryptic than your usual high-level language. A class file looks something like this:
move A0, S1;
add A0, 1;
.
.
Whereas, machine code is simply binary:
0101010101101001010
1010001010110010101
0101010101010101001
If you were to open an executable file you would see gibberish, because the bytes stored in memory could be a piece of data (a character, integer) or a processor instruction. A text editor is simply taking each byte and mapping it to it's ascii equivalent. Some of the bytes have no equivalent (like a processor instruction). So, you get those weird looking boxes that indicate the character is undefined. A text editor expects that the file your trying to open contains ascii or unicode characters. I've never tried opening a binary file, but I would try using a hex editor. A hex editor will show you the code in hexadecimal, from which you could easily, determine the binary equivalent using a hex-to-binary internet calculator.