Madhukar Daftary has the correct answer using combinatorial notation. "nCk" is an ASCII shorthand for C(n,k) [n objects chosen k at a time], which equals n!/(k!(n-k)!), where ! is the factorial function; i.e, n! = 1 * 2 * 3 * ... * n. (Writing ASCII versions of mathematical functions is a real pain.) Stacey191919 makes perhaps the most common mistake in probability (other than simple typos and arithmetic errors): she has useful formulae, but she doesn't phrase the question correctly and so gets an incorrect answer. The others before them are just guessing, which is almost always wrong in then often-counterintuitive mathematics of probability. (I wrote this immediately after Stacey's post, so I can't comment on later posts.)
The key questions here is in what ways one might have "two or more boys" out of four. Madhukar's statement is the clearest: you can have 2, 3, or 4. This also means you cannot have 0 or 1. Since these states are mutually exclusive (no matter what, out of four children you will always have 0, 1, 2, 3, or 4 boys, ignoring extremely rare genetic cases), they must all add up to 1 (or 100%). It's easier to calculate two probabilities (0 or 1) than 3 (2, 3, or 4), so he did it that and subtracted it from 1 to get the probability that his cases did NOT happen. (The cases must be mutually exclusive for this to work -- another common error.)
If you're not into combinatorials or factorials, you can think of it this way:
* There are 16 possible outcomes (2 sexes each for 4 children = 2^4 = 16).
* Only one is "no boys". That's 1/16.
* For 1 boy, you can have him first, second, third, or fourth. That's 4/16.
* So 5 out of 16 cases are "0 or 1 boys".
* All the other cases must acceptable ("2, 3, or 4 boys"), so that's 1 - 5/16 = 11/16.
Of course, this is only relatively easy for small, simple problems. That's why they invented the formal math.
For basic programmers (in any language), one way I've found to do sanity checks on probability calculations is to write a quick program to test my understanding of the situation. It performs thousands of tries and adds up the results to show what the actual statistics of the model might be. Here, you could write this (expressed in pseudo-Basic):
' Comments start with apostrophe (') and end at end of line.
' You may need to adjust some names, numbers, and syntax
' to match your programming language.
' Assume "DIM results[5]" creates array with elements (0,1,2,3,4), all set to 0.
' Each element "results[X]" will add up the number of times we had "X" boys.
DIM results[5]
' We'll run through 16000 families with four kids.
FOR family = 1 TO 16000
b = 0
FOR child = 1 TO 4
r = RANDOM(2) ' assume RANDOM(2) returns either 1 or 2
' We'll consider 1=girl and 2=boy.
IF r = 2 THEN b = b + 1
NEXT child
' b now has 0-4, representing how many boys of 4 kids this family had.
' Increment case where number of boys is "b".
results[b] = results[b] + 1
NEXT family
PRINT "0 boys:", results[0]
PRINT "1 boy: ", results[1]
PRINT "2 boys:", results[2]
PRINT "3 boys:", results[3]
PRINT "4 boys:", results[4]
PRINT "2 or more boys:", results[2] + results[3] + results[4]
PRINT "At most 1 boy: ", results[0] + results[1]
Given 16 possibilities, you should get a decent probability distribution after 16000 runs. You should find that "2 or more boys" is pretty close to 0.6875, or 11/16. I added all the other PRINT statements to show how the general distribution went. The last PRINT, "At most 1 boy", is the opposite of "2 or more boys", so the last two numbers should ALWAYS add up to 1.000, even if the distribution doesn't reflect the odds (e.g., if you only ran it a few times). That's a sanity check to help ensure you haven't made a logical error, which is all too easy both in probability and in programming.
Hope this helps.