Register to reply

[python] Bitwise Operations

by Adyssa
Tags: bitwise, operations, python
Share this thread:
Adyssa
#1
Jan14-13, 05:49 PM
P: 188
I'm playing around in Python at the moment, and I came across an exercise to perform bitwise operations manually (without the built in & | ^ ~ operators).

I understand the operations on paper, and I have a function here that performs them (& in this case, the others are similar):

def bitwise_and(num1, num2):

	result = "" # the result of the bitwise and operation

	while num1 > 0 or num2 > 0:
		# num % 2  != 0 implies a 1-bit in the lowest position
		if num1 % 2 != 0 and num2 % 2 != 0: 
			result = "1" + result # both bits are 1, so 1 & 1 == 1, append 1 to result
		else:
			result = "0" + result# at least one 0 bit, 1 & 0 == 0, 0 & 0 == 0, append 0

		num1 = num1 >> 1 # drop the last bit
		num2 = num2 >> 1 # drop the last bit

	return int(result,2) # return an int representation of the result binary string
I'd like some help modifying this implementation to use an integer type for the result instead of a string type which I then have to convert. I was trying to set the current result bit and then left shift (<<) but it didn't work when I only had 0 bits to work with because 0b0 == 0b00 == 0b0000000 so there's no significant 1 bit to shift. Is there a neater way do this?
Phys.Org News Partner Science news on Phys.org
NASA team lays plans to observe new worlds
IHEP in China has ambitions for Higgs factory
Spinach could lead to alternative energy more powerful than Popeye
NemoReally
#2
Jan15-13, 05:33 AM
P: 194
I've not programmed in Python, however, ... Have you considered using the divmod operator, with the 'div' bit providing the shifted number and then multiplying the 'mod' bits together (then iterating until the 'div' bit of either number is 0). It seems to work in Mathcad ...

Attached Thumbnails
phys - 13 01 15 boolean 01.jpg  
Adyssa
#3
Jan18-13, 04:31 AM
P: 188
Thanks, that's nice and simple :) I can stare at problems forever and just not grok things properly sometimes! Here's some Python code:

#divmod version

def divmod_and(x, y):
    z = 0
    p = 1
    while x or y:
        x, xd = divmod(x, 2)
        y, yd = divmod(y, 2)
        z = p * xd * yd + z
        p <<= 1

    return z

# manual mod and divide for clarity

def bitwise_and(x, y):
    result = 0
    power = 1
    while x or y:
        bit = x % 2 * y % 2 # both bits on == 1
        result = bit * power + result
        x /= 2
        y /= 2
        power <<= 1

    return result


Register to reply

Related Discussions
Simulating bitwise AND operator Engineering, Comp Sci, & Technology Homework 4
Bitwise AND operation backwards Engineering, Comp Sci, & Technology Homework 3
Bitwise operations in Macysma derived Computer Algebra Systems? Programming & Computer Science 1
Bit shifting and bitwise operators Engineering, Comp Sci, & Technology Homework 1
Bitwise Operation Electrical Engineering 0