434,880 Members | 2,279 Online
Need help? Post your question and get tips & solutions from a community of 434,880 IT Pros & Developers. It's quick & easy.

# binary const

 P: n/a Hello all, is there a way in order to write binary numbers as hexa or octal in c ? Xavier Jan 4 '06 #1
5 Replies

 P: n/a 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 Jan 5 '06 #2

 P: n/a 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 --- Jan 5 '06 #3

 P: n/a 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 #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 Jan 5 '06 #4

 P: n/a 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....30b6d3da12c8f). My version was based off what I had remembered of his very clever idea, Tom's is much nicer. Robert Gamble Jan 5 '06 #5

 P: n/a "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 #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) ks***@mib.org San Diego Supercomputer Center <*> We must do something. This is something. Therefore, we must do this. Jan 5 '06 #6

### This discussion thread is closed

Replies have been disabled for this discussion.