binary const

Discussion in 'C Programming' started by serrand, Jan 4, 2006.

  1. serrand

    serrand Guest

    Hello all,

    is there a way in order to write binary numbers as hexa or octal in c ?

    Xavier
     
    serrand, Jan 4, 2006
    #1
    1. Advertising

  2. serrand wrote:
    > Hello all,
    >
    > is there a way in order to write binary numbers as hexa or octal in c ?


    I assume you are asking whether C supports a binary constant notation
    like it does for octal and hexadecimal numbers, the answer is no. It
    is not too difficult to create macros that allow you to do this though.

    Robert Gamble
     
    Robert Gamble, Jan 5, 2006
    #2
    1. Advertising

  3. serrand

    Joe Wright Guest

    Robert Gamble wrote:
    > serrand wrote:
    >
    >>Hello all,
    >>
    >>is there a way in order to write binary numbers as hexa or octal in c ?

    >
    >
    > I assume you are asking whether C supports a binary constant notation
    > like it does for octal and hexadecimal numbers, the answer is no. It
    > is not too difficult to create macros that allow you to do this though.
    >
    > Robert Gamble
    >

    Can you give me an example of a macro to do this? Thanks.

    --
    Joe Wright
    "Everything should be made as simple as possible, but not simpler."
    --- Albert Einstein ---
     
    Joe Wright, Jan 5, 2006
    #3
  4. Joe Wright wrote:
    > Robert Gamble wrote:
    > > serrand wrote:
    > >
    > >>Hello all,
    > >>
    > >>is there a way in order to write binary numbers as hexa or octal in c ?

    > >
    > >
    > > I assume you are asking whether C supports a binary constant notation
    > > like it does for octal and hexadecimal numbers, the answer is no. It
    > > is not too difficult to create macros that allow you to do this though.
    > >
    > > Robert Gamble
    > >

    > Can you give me an example of a macro to do this? Thanks.


    Absolutely. I have seen a couple of variations (which I can't seem to
    locate right now) but the below example gets the gist of the technique
    across:

    #include <stdio.h>

    #define A(x) 0 ## x ## ULL
    #define B(x) ((A(x) & 01ULL) + (2*(!!((A(x) & 010ULL)))) + (4*(!!((A(x)
    & 0100ULL)))))

    int main (void) {
    printf("%llu\n", B(110));
    return 0;
    }

    This version handles up to 3 digit binary numbers, extending it to
    handle more is trivial.
    This isn't perfect as it can only represent a range limited by the
    highest octal representation which is why the ULL modifier is there but
    it is good enough for some.

    Robert Gamble
     
    Robert Gamble, Jan 5, 2006
    #4
  5. Robert Gamble wrote:
    > Joe Wright wrote:
    > > Robert Gamble wrote:
    > > > serrand wrote:
    > > >
    > > >>Hello all,
    > > >>
    > > >>is there a way in order to write binary numbers as hexa or octal in c ?
    > > >
    > > >
    > > > I assume you are asking whether C supports a binary constant notation
    > > > like it does for octal and hexadecimal numbers, the answer is no. It
    > > > is not too difficult to create macros that allow you to do this though.
    > > >
    > > > Robert Gamble
    > > >

    > > Can you give me an example of a macro to do this? Thanks.

    >
    > Absolutely. I have seen a couple of variations (which I can't seem to
    > locate right now)


    Found it. Tom Torfs posted virtually the same method on
    comp.arch.embedded on 2/26/2004 in the topic entitled "Binary constant
    macros"
    (http://groups.google.com/group/comp.arch.embedded/msg/9d430b6d3da12c8f).
    My version was based off what I had remembered of his very clever
    idea, Tom's is much nicer.

    Robert Gamble
     
    Robert Gamble, Jan 5, 2006
    #5
  6. "Robert Gamble" <> writes:
    > Joe Wright wrote:
    >> Robert Gamble wrote:
    >> > serrand wrote:
    >> >>is there a way in order to write binary numbers as hexa or octal in c ?
    >> >
    >> > I assume you are asking whether C supports a binary constant notation
    >> > like it does for octal and hexadecimal numbers, the answer is no. It
    >> > is not too difficult to create macros that allow you to do this though.
    >> >
    >> > Robert Gamble
    >> >

    >> Can you give me an example of a macro to do this? Thanks.

    >
    > Absolutely. I have seen a couple of variations (which I can't seem to
    > locate right now) but the below example gets the gist of the technique
    > across:
    >
    > #include <stdio.h>
    >
    > #define A(x) 0 ## x ## ULL
    > #define B(x) ((A(x) & 01ULL) + (2*(!!((A(x) & 010ULL)))) + (4*(!!((A(x)
    > & 0100ULL)))))
    >
    > int main (void) {
    > printf("%llu\n", B(110));
    > return 0;
    > }
    >
    > This version handles up to 3 digit binary numbers, extending it to
    > handle more is trivial.
    > This isn't perfect as it can only represent a range limited by the
    > highest octal representation which is why the ULL modifier is there but
    > it is good enough for some.


    That's a very clever technique. Note that "very clever" is not
    necessarily a good thing.

    Debugging is twice as hard as writing the code in the first
    place. Therefore, if you write the code as cleverly as possible, you
    are, by definition, not smart enough to debug it.
    -- Brian W. Kernighan

    (Yes, that's the K in K&R.)

    It would be nice, IMHO, if C supported binary constants, probably
    using a syntax like 0b11001001. Since it doesn't, the best
    alternative is to use octal or hexadecimal constants; a knowledgable
    reader knows that each digit represents 3 or 4 bits.

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
    We must do something. This is something. Therefore, we must do this.
     
    Keith Thompson, Jan 5, 2006
    #6
    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. Replies:
    11
    Views:
    1,124
  2. Javier
    Replies:
    2
    Views:
    584
    James Kanze
    Sep 4, 2007
  3. 0m
    Replies:
    26
    Views:
    1,142
    Tim Rentsch
    Nov 10, 2008
  4. fungus
    Replies:
    13
    Views:
    901
    fungus
    Oct 31, 2008
  5. Replies:
    2
    Views:
    545
    Andrew Koenig
    Feb 9, 2009
Loading...

Share This Page