Compiler converts human written commands in to binary forms so that machines can understand them and interpret them.
Not always, there is nothing to say that a compiler could not convert a higher level language to a lower level one, springing to mind converting some language to C, - this is a very popular option as it presents numerous advantages.
For compilation they first check the programs for syntax errors, available memory required for compilation, and then they start with the process.
Often, but not always
- this is known as static analysis, the amount of static analysis performed will depend on the compiler and language itself - for instance a C compiler will probably do less static analysis over memory than a Java one. Another form of analysis is dynamic analysis, this is where code is placed into the target code to detect errors at runtime which can not be done during compilation.
Compilers itself are some programmers written in machine understandable language
Quite interesting is where compilers are written in the language they are compiling (such as javacc, there are many)