You are turning any number into either 1 or 0 with x = x % 2. You may as well just print str(x % 2) * n.
You need to use integer division instead, and test separately for even or odd.
Even better, you could just append the output of the modulus test, as string, to stringy:
stringy.insert(0, str(x % 2))
x = x // 2
Demo with the code simplified a bit:
>>> def sortbit(n):
... max_num = 2**n
... for x in range(max_num):
... stringy = []
... for a in range(n):
... stringy.append(str(x % 2))
... x //= 2
... print ''.join(reversed(stringy))
...
>>> sortbit(3)
000
001
010
011
100
101
110
111
You could also bitshift the value; the >> operator moves the bits to the right for you by a given number of steps; x >> 1 shifts the bits in x one step over, essentially dividing by two.
You could also look into the bin() function (returns the value as a binary string, starting with 0b), and the format() function, together with the str.format() method, which lets you format values as binary strings as well using the b output format. Printing your values in a loop could be as simple as:
def sortbit(n):
for i in range(2**n):
print '{:0{}b}'.format(i, n)
Last but not least, you are simply producing the product of the digits 0 and 1, n times. You could express that with itertools.product() as well:
>>> from itertools import product
>>> for bits in product('01', repeat=3):
... print ''.join(bits)
...
000
001
010
011
100
101
110
111
but that could be seen as cheating. :-)
["".join(item) for item in itertools.product(("01"), repeat=3)]for i in range(2**3): print format(i,'03b')