retitle 299847 [fixed in 2.4] shift operator doesn't extend to longs
tags 299847 + fixed-upstream
thanks
Did you see the warning?
tai64nlocal.py:16: FutureWarning: x<<y losing bits or changing sign will return
a long in Python 2.4 and up secs <<= 4
that's "fixed" in python2.4.
Toni Mueller writes:
>
>
>
> Package: python2.3
> Version: 2.3.5-1
> Severity: normal
>
> *** Please type your report below this line ***
>
> Hello,
>
> I've tried to convert DJB's "tai64nlocal" program from C to Python. This
> looks easy since the code can more or less be used 1:1 in both
> languages, but requires proper handling of very long integers.
>
> This is not the case: underway, the variables were turned negative after
> shifts, and not extended. Exchanging the shifts ("<<=") with
> multiplications ("*=") fixed the results. The code:
>
> ----------- cut
> import sys, string
> from time import mktime, localtime
>
> digits = { '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6,
> '7': 7, '8': 8, '9': 9, 'a': 10, 'b': 11, 'c': 12,
> 'd': 13, 'e': 14, 'f': 15 }
>
> def readTai64 (stamp):
> secs = 0
> nanosecs = 0
> for i in stamp:
> if i == '@': continue
> if i > 'f': break
> print "readTai64(%s): i= %s" % (stamp, i)
> u = digits[i]
> secs *= 16
> secs += nanosecs >> 28
> nanosecs &= 0x0fffffff
> nanosecs *= 16
> nanosecs += u
> print "readTai64(%s): u= %s secs= %s nanosecs= %s" % (stamp, u,
> secs, nanosecs)
> secs -= 4611686018427387914
> t = localtime(secs)
> return [ t, secs, nanosecs ]
>
> if __name__ == '__main__':
> """simulate tai64nlocal"""
> for f in sys.argv[1:]:
> for l in file(f):
> print "l: %s\n" % l
> stamp, body = string.split (l, ' ', 1)
> print readTai64(stamp), body
> ----------- cut
>
>
> Test case data:
>
> @400000004238b09c2cc80704 something
>
> should result in printing a time stamp of 2005-03-16 23:17:54.751306500,
> but won't if you put back in the shift operators.
>
>
>
> Best,
> --Toni++
>
>
>
> -- System Information:
> Debian Release: 3.1
> APT prefers unstable
> APT policy: (500, 'unstable'), (1, 'experimental')
> Architecture: i386 (i686)
> Kernel: Linux 2.4.27-2-686-smp
> Locale: [EMAIL PROTECTED], [EMAIL PROTECTED] (charmap=ISO-8859-15)
>
> Versions of packages python2.3 depends on:
> ii libbz2-1.0 1.0.2-5 high-quality block-sorting file
> co
> ii libc6 2.3.2.ds1-20 GNU C Library: Shared libraries
> an
> ii libdb4.2 4.2.52-18 Berkeley v4.2 Database Libraries
> [
> ii libncurses5 5.4-4 Shared libraries for terminal
> hand
> ii libreadline4 4.3-15 GNU readline and history
> libraries
> ii libssl0.9.7 0.9.7e-3 SSL shared libraries
> ii zlib1g 1:1.2.2-4 compression library - runtime
>
> -- no debconf information
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]