lkml.org 
[lkml]   [1998]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [OFFTOPIC] Binary declaration
Thus, Mike A. Harris writes:
> >Hex: 0x<NUMBER>
> >Octal: 0<NUMBER>
> >Binary: ????

> In ANSI C, there is no binary representation available. Watcom C
> I believe has an extention to allow you to use something like:
> 0b010101110
>
> #define b00000000 0x00
> ...
> #define b11111111 0xFF

I once wrote a set of macros for the same, which works for 8/16/32/64 bits.
Remember to compile with -O or more, so that these get optimized away
entirely and replaced by the value (see the assembly code generated)
(without -On the generated code looks horrible). e.g. -
char x = BIN8(00101101);
short x = BIN16(0000000001001001);
int y = BIN32(00000100000010000000100000010000)
You need all the leading zeroes, so you can't say BIN8(101101) for the above.
A minor catch is that you can't use this in a declaration outside of any
function, since gcc complains that the initializer element isn't constant.

Sorry to be off-topic, but thought this might be useful.

/*
* called by the below four macros, and they work by calling each other
* remember to compile with -On
*/
#define _BIN1(n,i) ((#n)[i]-'0')
#define _BIN2(n,i) (_BIN1(n,i+1) + 2 * _BIN1(n,i))
#define _BIN4(n,i) (_BIN2(n,i+2) + 4 * _BIN2(n,i))
#define _BIN8(n,i) (_BIN4(n,i+4) + 16 * _BIN4(n,i))
#define _BIN16(n,i) (_BIN8(n,i+8) + 256 * _BIN8(n,i))
#define _BIN32(n,i) (_BIN16(n,i+16) + 65536UL * _BIN16(n,i))
#define _BIN64(n,i) (_BIN32(n,i+32) + 65536UL * 65536UL * _BIN32(n,i))
/*
* Use one of the four macros below
*/
#define BIN8(n) _BIN8(n,0)
#define BIN16(n) _BIN16(n,0)
#define BIN32(n) _BIN32(n,0)
#define BIN64(n) _BIN32(n,0)

--
Sitaram Iyer <ssiyer@cs.rice.edu> http://www.cs.rice.edu/~ssiyer/
Phone: Res: (713) 630-9260, Office: (713) 527-8750 x3291 (direct dial)
New graduate student in the Computer Science dept at Rice University

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:45    [W:0.027 / U:0.408 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site