By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
434,796 Members | 1,240 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 434,796 IT Pros & Developers. It's quick & easy.

bit shifting question

P: n/a
Hi,
My background is c/c++ and java. I'm learning python at this point.

My question is does python share java's peculiar mode of bit shifting, or
does python adhere closer to c's bit shifting?

in java there are 3 kinds of bit shifts:
<< (shift left)
(preserve the sign bit as we move right )
(0 filled on the left as we move right)

In C, the behavior is
<< (shift left) (shift right , 0 filled (like java's >>>'))


I tried looking around but haven't really got an answer yet. I guess I need
to write a mini python script. Please don't write any code, I'm just
looking for a website or something where I can figure this stuff out in
python.

Thanks in advance,

David
-------
Cell: http://cellphone.duneram.com/index.html
Cam: http://www.duneram.com/cam/index.html
Tax: http://www.duneram.com/index.html

__________________________________________________ _______________
FREE pop-up blocking with the new MSN Toolbar get it now!
http://toolbar.msn.click-url.com/go/...ave/direct/01/
Jul 18 '05 #1
Share this Question
Share on Google+
6 Replies


P: n/a
"David Stockwell" <wi*******@hotmail.com> writes:
Hi,
My background is c/c++ and java. I'm learning python at this point.

My question is does python share java's peculiar mode of bit shifting,
or does python adhere closer to c's bit shifting?
The right shift in Python is arithmetic, i.e. preserves the sign bit.
in java there are 3 kinds of bit shifts:
<< (shift left)
>> (preserve the sign bit as we move right )
>>> (0 filled on the left as we move right)
In C, the behavior is
<< (shift left) >> (shift right , 0 filled (like java's >>>'))
Have you tried this recently? I believe that whether >> sign fills is
undefined by the C standard but most of the time it dos.
I tried looking around but haven't really got an answer yet. I guess
I need to write a mini python script.


No you don't! If you haven't realized that you can do

$ python
Python 2.2.2 (#1, Feb 24 2003, 19:13:11)
[GCC 3.2.2 20030222 (Red Hat Linux 3.2.2-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information. (-1) >> 3

-1

you have MUCH to learn about Python...

Cheers,
mwh

--
Python enjoys making tradeoffs that drive *someone* crazy <wink>.
-- Tim Peters, comp.lang.python
Jul 18 '05 #2

P: n/a
On 2004-05-17, Michael Hudson <mw*@python.net> wrote:
My question is does python share java's peculiar mode of bit
shifting, or does python adhere closer to c's bit shifting?


The right shift in Python is arithmetic, i.e. preserves the
sign bit.


Which one is the sign bit? IOW, how wide is a "word"?

--
Grant Edwards grante Yow! LBJ, LBJ, how many
at JOKES did you tell today??!
visi.com
Jul 18 '05 #3

P: n/a
Michael Hudson wrote:
Have you tried this recently? I believe that whether >> sign fills is
undefined by the C standard but most of the time it dos.


It's implementation defined, to be more exact.

--
__ Erik Max Francis && ma*@alcyone.com && http://www.alcyone.com/max/
/ \ San Jose, CA, USA && 37 20 N 121 53 W && AIM erikmaxfrancis
\__/ But you're not going to be there tomorrow. And it's all about
tomorrow. -- Montgomery Brogan
Jul 18 '05 #4

P: n/a
Grant Edwards wrote:
On 2004-05-17, Michael Hudson <mw*@python.net> wrote:
My question is does python share java's peculiar mode of bit
shifting, or does python adhere closer to c's bit shifting?


The right shift in Python is arithmetic, i.e. preserves the
sign bit.


Which one is the sign bit? IOW, how wide is a "word"?

In most cases, you should not be able to discover how wide
a "word" is. Python is trying to move to a single integer
data type which is a combination of the current "long" and
"int" where the internal representation is an implementation
detail. Unfortunately, shifting is one of those places you
can still discover the "width" with code like:

def wordwidth():
for shift in range(256):
if 1 << shift < 0:
return 1 + shift

--
-Scott David Daniels
Sc***********@Acm.Org
Jul 18 '05 #5

P: n/a
In article <40********@nntp0.pdx.net>,
Scott David Daniels <Sc***********@Acm.Org> wrote:
Unfortunately, shifting is one of those places you
can still discover the "width" with code like:

def wordwidth():
for shift in range(256):
if 1 << shift < 0:
return 1 + shift


Of course this will give a warning in 2.3 and fail to work in 2.4...
I wish I could get the 2.4 behavior now with a from __future__ import
but I don't see one for this, instead I find myself doing 1L<<shift a
lot.

--
David Eppstein http://www.ics.uci.edu/~eppstein/
Univ. of California, Irvine, School of Information & Computer Science
Jul 18 '05 #6

P: n/a
Grant Edwards <gr****@visi.com> writes:
On 2004-05-17, Michael Hudson <mw*@python.net> wrote:
My question is does python share java's peculiar mode of bit
shifting, or does python adhere closer to c's bit shifting?


The right shift in Python is arithmetic, i.e. preserves the
sign bit.


Which one is the sign bit? IOW, how wide is a "word"?


Well, quite :-) Perhaps I should have said "preserves sign".

Cheers,
mwh

--
I'm sorry, was my bias showing again? :-)
-- William Tanksley, 13 May 2000
Jul 18 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.