SIM800 gsm Module returns 0 on AT+COPS?
It can take a while for a modem to register on the network - sometimes several minutes.

Turning on CREG URCs can help you monitor what is happening:

AT+CREG=1


You should now start getting +CREG notifications as the network status changes. 

Before using AT+COPS? you should really select a reporting mode so you know what you are looking at. I prefer numeric, since it's easier to parse:

AT+COPS=0,2


That will switch to automatic registration and reporting as numbers.

AT+COPS?
+COPS: 0
OK


That is not registered.

AT+COPS?
+COPS: 0,2,"40404"
OK


That is registered on a network with ID 40404.  

The +CREG reports tell you what is going on:

+CREG: 1


That tells you that you have just connected to your home network.

If you are roaming, you would see:

+CREG: 5


Of course, if your home network is not available (say you have an AT&amp;T SIM and only Verizon is visible at the moment), and your SIM doesn't have roaming enabled, then registration will never work.  You'd expect to see +CREG reports of:

+CREG: 2
+CREG: 3
+CREG: 0


That is "trying to register" (2), "registration denied" (3) and "doing nothing much now" (0).

The best document for learning about these commands is the 3GPP Command Set which is the standard that all modern GPRS modems should adhere to.