On Wed, 01 Feb 2006 12:33:36 +0000, "Gustavo J. A. M. Carneiro" <[EMAIL PROTECTED]> wrote: [...] > Hmm.. I'm beginning to think 13r16 or 16r13 look too cryptic to the >casual observer; perhaps a suffix letter is more readable, since we >don't need arbitrary radix support anyway. > >/me thinks of some examples: > > 644o # I _think_ the small 'o' cannot be easily confused with 0 or O, >but.. > 10h # hex.. hm.. but we already have 0x10 > 101b # binary > > Another possility is to extend the 0x syntax to non-hex, > > 0xff # hex > 0o644 # octal > 0b1101 # binary > > I'm unsure which one I like better. > Sorry if I seem to be picking nits, but IMO there's more than a nit here:
The trouble with all of these is that they are all literals for integers, but integers are signed, and there is no way to represent the sign bit (wherever it is for a particular platform) along with the others, without triggering a promotion to positive long. So you get stuff like >>> def i32(i): return int(-(i&0x80000000))+int(i&0x7fffffff) ... >>> MYCONST = i32(0x87654321) >>> MYCONST -2023406815 >>> type(MYCONST) <type 'int'> >>> hex(MYCONST) '-0x789abcdf' Oops ;-/ >>> hex(MYCONST&0xffffffff) '0x87654321L' instead of MYCONST = 16cf87654321 Hm... maybe an explicit ordinary sign _after_ the prefix would be more mnemonic instead of indicating it with the radix-complement (f or 0 for hex). E.g., MYCONST = 16r-87654321 # all bits above the 8 are ones and MYCONST = 16r+87654321 # explicitly positive, all bits above 8 (none for 32 bits) are zeroes MYCONST = 16r87654321 # implicitly positive, ditto or the above in binary MYCONST = 2r-10000111011001010100001100100001 # leading bits are ones (here all are specified for 32-bit int, but # effect would be noticeable for smaller numbers or wider ints) MYCONST = 2r+10000111011001010100001100100001 # leading bits are zeroes (ditto) MYCONST = 2r10000111011001010100001100100001 # ditto This could also be done as alternative 0x syntax, e.g. using 0h, 0o, and 0b, but I sure don't like that '0o' ;-) BTW, for non-power-of-two radices(?), it should be remembered that the '-' is mnemonic for the symbol for (radix-1), and '+' or no sign is mnemonic for a prefixed 0 (which is 0 in any allowable radix) in order to have this notation have general radix expressivity for free ;-) Regards, Bengt Richter _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com