Why is that when I download a binary from the web it doesn't have executable permissions set, but when I use gcc to build a binary it does?

view story

http://unix.stackexchange.com – For example, if I have the file hello.c which just contains: int main() { printf("Hello world"); return 0; } and I built it in gcc with gcc hello.c -o hello I can then run ./hello and it runs. However, if I try to download a binary from the web with e.g. curl, I first have to set the permissions with chmod before I can run it. Is there a reason why? Do gcc and/or curl set some default permissions on the files? (HowTos)