irb: 1 & 1 => 1, not true huh? I thought 1 & 1 => true

Discussion in 'Ruby' started by Peter Alvin, Sep 28, 2008.

  1. Peter Alvin

    Peter Alvin Guest

    In irb I did:

    puts 1 & 1
    and get 1
    shouldn't I get true?

    Bottom line is this: What is Ruby idiom to test for bit mask? Is there
    a more simple way to write:

    if session[:permissions] & Permissions::SomeMask ==
    Permissions::SomeMask
    # user has permission to wash clothes, etc.
    end

    TIA,
    Pete
    --
    Posted via http://www.ruby-forum.com/.
     
    Peter Alvin, Sep 28, 2008
    #1
    1. Advertising

  2. Peter Alvin wrote:
    > In irb I did:
    >
    > puts 1 & 1
    > and get 1
    > shouldn't I get true?
    >
    > Bottom line is this: What is Ruby idiom to test for bit mask? Is there
    > a more simple way to write:
    >
    > if session[:permissions] & Permissions::SomeMask ==
    > Permissions::SomeMask
    > # user has permission to wash clothes, etc.
    > end


    a && b returns the first false element or the last true element.

    a & b where a and b are Fixnums does a bit mask like you're looking for.

    - Charlie
     
    Charles Oliver Nutter, Sep 28, 2008
    #2
    1. Advertising

  3. Re: irb: 1 & 1 => 1, not true huh? I thought 1 & 1 => true

    On Sep 28, 4:19 pm, Peter Alvin <> wrote:
    > In irb I did:
    >
    > puts 1 & 1
    > and get 1
    > shouldn't I get true?
    >
    > Bottom line is this: What is Ruby idiom to test for bit mask?  Is there
    > a more simple way to write:
    >
    > if session[:permissions] & Permissions::SomeMask ==
    > Permissions::SomeMask
    >   # user has permission to wash clothes, etc.
    > end
    >
    > TIA,


    You say thanks when nobody has replied, so
    you are thanking nobody. You should wait
    till someone has replied before you thank
    him. Otherwise, he won't even know that you
    have read his post; that is very rude and
    inconsiderate.

    > Pete


    # bitwise
    254 & 15
    ==>14
    # boolean
    254 && 15
    ==>15

    Only two things are untrue: nil and false.

    puts "it's true" if 0
    it's true
    ==>nil
    puts "it's true" if 254 & 1
    it's true
    ==>nil
    puts "it's true" if 254 & 1 > 0
    ==>nil
     
    William James, Sep 28, 2008
    #3
  4. Hi,

    At Mon, 29 Sep 2008 06:19:01 +0900,
    Peter Alvin wrote in [ruby-talk:316270]:
    > puts 1 & 1
    > and get 1
    > shouldn't I get true?


    No. If it were, bit AND operation would be unavailable.

    > if session[:permissions] & Permissions::SomeMask ==
    > Permissions::SomeMask


    if (session[:permissions] & Permissions::SomeMask).nonzero?

    --
    Nobu Nakada
     
    Nobuyoshi Nakada, Sep 29, 2008
    #4
  5. Re: irb: 1 & 1 => 1, not true huh? I thought 1 & 1 => tr

    > Bottom line is this: What is Ruby idiom to test for bit mask? Is there
    > a more simple way to write:
    >
    > if session[:permissions] & Permissions::SomeMask ==
    > Permissions::SomeMask
    > # user has permission to wash clothes, etc.
    > end


    That's basically right - you can factor this out into your own method if
    you do it a lot.

    If you want to test for a single bit, there is Fixnum#[]

    a = 14
    a[0] # 0
    a[1] # 1
    a[2] # 1
    a[3] # 1
    a[4] # 0

    You'd still have to test for a[2] == 1, since 0 and 1 are both true.

    However you could use a different representation for your permissions,
    such as a string containing a single letter for each permission granted.
    Then:

    if session[:permissions].include?("w")
    # user has permission to wash clothes
    end

    or simply

    if session[:permissions]["w"]
    # user has permission to wash clothes
    end
    --
    Posted via http://www.ruby-forum.com/.
     
    Brian Candler, Sep 29, 2008
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. VB Programmer
    Replies:
    1
    Views:
    362
    Chris Moore
    Jun 12, 2004
  2. bdb112
    Replies:
    45
    Views:
    1,417
    jazbees
    Apr 29, 2009
  3. Sam Stephenson
    Replies:
    1
    Views:
    260
    Andrew Walrond
    Jun 18, 2005
  4. Replies:
    1
    Views:
    177
    Florian Groß
    Oct 26, 2005
  5. anne001
    Replies:
    1
    Views:
    308
    anne001
    Jun 27, 2006
Loading...

Share This Page