Velocity Reviews > Using bitshift in assigning a number to a variable?

# Using bitshift in assigning a number to a variable?

bollod
Guest
Posts: n/a

 12-25-2003
Is there any benefit to declaring a variable:

x = (1<<12);

x = 4096;

(besides the geek appeal of course )

I have seen these kind of declarations come up in some code I have been
fiddling with and was wondering if there was any tangible benefit, (I have
also seen stuff declared as hex, is there any benefit to that either).

---
bollod

bollod
Guest
Posts: n/a

 12-25-2003
On Fri, 26 Dec 2003 04:03:30 +0000, pete wrote:

> bollod wrote:
>>
>> Is there any benefit to declaring a variable:
>>
>> x = (1<<12);
>>
>>
>> x = 4096;
>>
>> (besides the geek appeal of course )
>>
>> I have seen these kind of declarations come up
>> in some code I have been
>> fiddling with and was wondering if there was any tangible benefit,
>> (I have also seen stuff declared as hex,
>> is there any benefit to that either).

>
> It's easier to visualise the binary representation
> of the values that way,

That makes sense.

What would you do if you needed to create the mask '10101010' (besides
foo=170 or foo=0xA4)?

---
bollod

pete
Guest
Posts: n/a

 12-26-2003
bollod wrote:
>
> Is there any benefit to declaring a variable:
>
> x = (1<<12);
>
>
> x = 4096;
>
> (besides the geek appeal of course )
>
> I have seen these kind of declarations come up
> in some code I have been
> fiddling with and was wondering if there was any tangible benefit,
> (I have also seen stuff declared as hex,
> is there any benefit to that either).

It's easier to visualise the binary representation
of the values that way,

--
pete

pete
Guest
Posts: n/a

 12-26-2003
bollod wrote:
>
> On Fri, 26 Dec 2003 04:03:30 +0000, pete wrote:
>
> > bollod wrote:
> >>
> >> Is there any benefit to declaring a variable:
> >>
> >> x = (1<<12);
> >>
> >>
> >> x = 4096;
> >>
> >> (besides the geek appeal of course )
> >>
> >> I have seen these kind of declarations come up
> >> in some code I have been
> >> fiddling with and was wondering if there was any tangible benefit,
> >> (I have also seen stuff declared as hex,
> >> is there any benefit to that either).

> >
> > It's easier to visualise the binary representation
> > of the values that way,

>
> That makes sense.
>
> What would you do if you needed to create the mask '10101010' (besides
> foo=170 or foo=0xA4)?

'10101010' looks more like 0xaa to me.

The shift notation is better
when the right operand of the shift operator
is an enum or a macro identifier which indicates which flag

--
pete

Robert Bachmann
Guest
Posts: n/a

 12-26-2003
bollod wrote:
> What would you do if you needed to create the mask '10101010' (besides
> foo=170 or foo=0xA4)?

I would write
#define SOME_MASK (1<<7 | 1<<5 | 1<<3 | 1<<1)
or
const int SOME_MASK=1<<7 | 1<<5 | 1<<3 | 1<<1;

--
http://www.velocityreviews.com/forums/(E-Mail Removed)

those who know me have no need of my name
Guest
Posts: n/a

 12-26-2003

>What would you do if you needed to create the mask '10101010' (besides
>foo=170 or foo=0xA4)?

correction: foo=0xAA. also foo=0252 and foo=strtol("10101010", 0, 2),
though the later cannot be used at file scope.

--
a signature

Darrell Grainger
Guest
Posts: n/a

 12-27-2003
On Thu, 25 Dec 2003, bollod wrote:

> Is there any benefit to declaring a variable:
>
> x = (1<<12);
>
>
> x = 4096;
>
> (besides the geek appeal of course )
>
> I have seen these kind of declarations come up in some code I have been
> fiddling with and was wondering if there was any tangible benefit, (I have
> also seen stuff declared as hex, is there any benefit to that either).

I'll answer the easier question first, there is a benefit to hexidecimal
notation. When I am doing bit twiddling it is easier to visualize the bit
pattern what using hexidecimal notation. One digit in hexidecimal notation
is exactly 4 bits.

The harder question is why use (1<<12) rather than 4096. If they used
0x1000 it would be more obvious. I'd guess that 99% of the time this is
just more readable. Another possible option is that someone was tuning the
code and found a 'trick' for a particular processor/compiler.

It is not impossible that a compiler will take:

x = (1<<12);

and optimize it to a STORE IMMEDIATE 1 and SHIFT opcode. The cycle count
for this might be faster than trying to assign 4096. This is a stretch but
not impossible. Mind you, I'd put a comment next to the code in case a
revision in the compiler or a port to a different architecture made this
tweek disappear.

--
Send e-mail to: darrell at cs dot toronto dot edu
Don't send e-mail to (E-Mail Removed)

Sean Kenwrick
Guest
Posts: n/a

 12-27-2003

"bollod" <(E-Mail Removed)> wrote in message
news(E-Mail Removed)...
> On Fri, 26 Dec 2003 04:03:30 +0000, pete wrote:
>
> > bollod wrote:
> >>
> >> Is there any benefit to declaring a variable:
> >>
> >> x = (1<<12);
> >>
> >>
> >> x = 4096;
> >>
> >> (besides the geek appeal of course )
> >>
> >> I have seen these kind of declarations come up
> >> in some code I have been
> >> fiddling with and was wondering if there was any tangible benefit,
> >> (I have also seen stuff declared as hex,
> >> is there any benefit to that either).

> >
> > It's easier to visualise the binary representation
> > of the values that way,

>
> That makes sense.
>
> What would you do if you needed to create the mask '10101010' (besides
> foo=170 or foo=0xA4)?
>
> ---
> bollod

x=2<<6|2<<4|2<<2|2;

or

x=10<<4|10;

or

x=5<<5|5<<1;

or

x=85<<1;

But now its just getting silly.....

Sean

Richard Heathfield
Guest
Posts: n/a

 12-27-2003
bollod wrote:

> On Fri, 26 Dec 2003 04:03:30 +0000, pete wrote:
>
>> It's easier to visualise the binary representation
>> of the values that way,

>
> That makes sense.
>
> What would you do if you needed to create the mask '10101010' (besides
> foo=170 or foo=0xA4)?

#define l )*2+1
#define O )*2
#define b1 ((((((((0

unsigned char foo = b1 l O l O l O l O ;

--
Richard Heathfield : (E-Mail Removed)
"Usenet is a strange place." - Dennis M Ritchie, 29 July 1999.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
K&R answers, C books, etc: http://users.powernet.co.uk/eton

Robert Bachmann
Guest
Posts: n/a

 12-27-2003
bollod wrote:
> Is there any benefit to declaring a variable:
>
> x = (1<<12);
>
>
> x = 4096;
>
> (besides the geek appeal of course )

If x is used as a "common variable" I can see no benefit.

But if x is used as some kind of bit-mask you got the benefit of
immediately seeing that the value of x is 1000000000000 in binary notation.

As (1<<n) can be read as 1 followed by n zero digits in binary notation.
For example: 1<<3 is 1000 in binary.

> (I have also seen stuff declared as hex, is there any benefit to that either).

| One digit in hexidecimal notation
| is exactly 4 bits.

So if you familiar with hexadecimal notation it's easy to see that
0x1000 (4096) is 1000000000000.

I also have seen code with bit-masks in octal notation (one digit in
octal notation represents 3 bits).

HTH,
Robert

--
(E-Mail Removed)