quickbeam

Bitshift has unwanted sign extension

4 posts in this topic

#1 ·  Posted

The BitShift funtion apparently does sign extension for 32-bit numbers if the MSb is set.  Is there any way to turn that off and do real (C style) bit shifts?

 

Share this post


Link to post
Share on other sites



#2 ·  Posted

BitShift in AutoIt is an arithmetic bit shift, not a logical operation. Help file should really say so and warn that BitShift may produce surprising result to unsuspecting users, e.g.:

Local $i = 0xA0000000
Local $iSAR_1 = BitShift($i, -1)
ConsoleWrite($i & @TAB & Hex($i) & @LF & $iSAR_1 & @TAB & Hex($iSAR_1) & @LF)

 


This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

Okay, thanks.  I guess arithmetic and logical are better terms to describe it.  I can see the value of both methods, but it did cause some debugging time. I guess I should have been tipped off when it said each bit shift is equivalent to doubling or halving the value.

I'm going to write my own, hopefully that won't take too long.

Edited by quickbeam
Add sentence to first paragraph

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • czardas
      By czardas
      I found a bit of time today to write something, after criticism that people chatting don't write enough code. Well it's perhaps an old school concept, but I wanted to solve it myself. Logical shift on an infinite hex string. Well not really infinite, but it might as well be compared to the small 32/64-bit versions. Please note: it only shifts bits once. If you want an actual infinite shift value (not really recommended) then use a while loop.
      Theoretically the code should run faster without calls to Int() , but this appears to be an unfortunate consequence of unfinished development. Don't ask me why that is, because I don't have an answer. Anyway forget that! This function might have been more useful to me about a year ago, but it was fun to figure out how to do it today anyway.
      IMPROVED VERSION IN >POST 8
      ;
      Original code



    • czardas
      By czardas
      The shift value for BitShift is described as: (the) Number of bits to shift to the right (negative numbers shift left).

      BitRotate description gives: Performs a bit shifting operation, with rotation.
      The shift value for BitRotate is described as: (the) Number of bits to rotate to the left (negative numbers shift right).

      I noticed this apparent inconsistancy recently after so my question is this: Is there a hidden deeper meaning to this, or is it just a bit of mix up?

      It appears inconsistant (default) behaviour, to me at least.