1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Simulating bitwise AND operator

  1. Apr 25, 2012 #1
    Hello,

    I have a problem where I must get value of a given binary bit in decimal number:

    f(decimal_number, bit_position) = bit_value

    For example, getting bit values in decimal 14 (binary 1110):

    f(14, 0) = 0
    f(14, 1) = 1
    f(14, 2) = 1
    f(14, 3) = 1

    In general it's easy:

    (14 & 20) >> 0 = 0
    (14 & 21) >> 1 = 1
    (14 & 22) >> 2 = 1
    (14 & 23) >> 3 = 1

    & is bitwise AND
    >> is bitwise arithmetic shift right

    But in specific (technical) application I cannot use bitwise operators :(
    So far I managed to get rid of one of them:

    (14 & 20) / (20) = 0
    (14 & 21) / (21) = 1
    (14 & 22) / (22) = 1
    (14 & 23) / (23) = 1

    But how to get rid of bitwise AND operator?

    Specific application limits me to following things to play with:
    +, -, *, /, (, ), square root, xy, ex, ln, log, abs, sin, cos, tan, asin, acos, atan
    using floating point decimal numbers. And it has to be "single line" - cannot divide solution
    to parts, use variables besides given decimal_number or use any if/else etc logic.

    It does not have to be "nice" solution, any "hack" will do as long as it works. For example
    "helper" constants (specific to bit position) could be used as additional input to the function.
     
    Last edited: Apr 25, 2012
  2. jcsd
  3. Apr 25, 2012 #2

    NascentOxygen

    User Avatar

    Staff: Mentor

    You may be able to adapt the "keep dividing by 2" method for converting decimal to binary.

    To see whether there is an 8 (i.e., ––1–––) divide your integer by 16. If the fractional part is >.5 the 3rd bit is a 1, i.e., a 1 in the 23 column.
     
  4. Apr 25, 2012 #3

    rcgldr

    User Avatar
    Homework Helper

    If this is unsigned integer math, using 32 bit numbers, with no overflow check:

    d = decimal number
    b = bit number

    f(d,b) = (d × 231-b) / (231)
     
  5. Apr 25, 2012 #4
    Thats a good way yes, but sadly seems that my "black box" is operating using high precision floating point values :( I think I could still implement what I need if one last obstacle could be overcome:

    How to do modulo operation (reminder of division) with toolset that I mentioned?
     
  6. Apr 25, 2012 #5

    rcgldr

    User Avatar
    Homework Helper

    I missed the part about floating point decimal numbers.

    I don't see how this could be done without a floor() function. You mentioned decimal point floating numbers, which could mean BCD (binary coded decimal) strings used for "packed decimal" in Cobol. This would be a problem. If the floating point numbers were binary based, and you knew the format and how hardware handled truncation, you could add, then subtract, a large power of 2 to remove the lower bits, but that still leaves upper bits to be cleared.
     
    Last edited: Apr 25, 2012
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Simulating bitwise AND operator
  1. Simulation with Pspice (Replies: 2)

  2. Heating Simulation (Replies: 3)

  3. Simulating an OpAmp (Replies: 1)

Loading...