Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: question about an efficient way to change the bits of a number.

Author: Ricardo Gibert

Date: 07:43:41 07/27/03

Go up one level in this thread


On July 27, 2003 at 07:22:20, Uri Blass wrote:

>On July 27, 2003 at 07:04:50, Ricardo Gibert wrote:
>
>>On July 27, 2003 at 06:51:51, Uri Blass wrote:
>>
>>>In movei there are cases when I want to change 2 bits of a number to be
>>>identical to the bits of another number.
>>>
>>>Let say I want b=a in the 2^0 bit and the 2^8 bit
>>>
>>>The simple way is
>>>
>>>if (a&256)
>>>b|=256;
>>>else
>>>b&=~256;
>>>if (a&1)
>>>b|=1;
>>>else
>>>b&=~1;
>>>
>>>a faster way that I could think about is:
>>>
>>>b|=(a&257);
>>>b&=~(257-(a&257));
>>>
>>>Is it the best way or maybe it is better to change the last line and have
>>>b|=(a&257);
>>>b&=~(257&(~(a&257)))
>>>
>>>Uri
>>
>>To compute b = a for mask m: b = (b&~m)|(a&m)   [untested]
>>
>>That's 4 operations. 3 if m is a constant when the "~" will optimized away.
>
>Thanks.
>It seems to work
>
>I usually think in terms of b|= or b&= because a and b are long expressions and
>I do not like to write them twice(a and b are varaible but they hide inside
>unions and arrays and I use long names for my arrays.


I use long names for seldom used variables and shorten the names of often used
variables irrespective of whether they are arrays or not.

If you are wary of reading and typing "infoqueensdir[target].u" too many times,
then the name is surely too long. If it is frequently used, a shortened name is
easily understood precisely because it is frequently used. A longer name in that
case is simply a wasted effort. Be practical.

If it is seldom used, why worry about typing it twice? In such cases you keep
the long name, because you need the information the long name conveys about
what's going on.

A rule that makes array names long regardless of whether it is used often or not
doesn't seem practical to me.


>
>The relevant line in my case is:
>infoqueensdir[target].u=(infoqueensdir[target].u&~257)|(infoqueensdir[sq].u&257);
>
>There are also other similiar lines.
>
>Can I write it without writing infoqueensdir[target].u twice
>or maybe it is better if I write it in 2 lines.
>
>Uri



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.