Author: Uri Blass
Date: 04:22:20 07/27/03
Go up one level in this thread
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. 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.