Message-ID: <3787DE6D.BACB1B58@silesia.top.pl> Date: Sun, 11 Jul 1999 02:59:41 +0300 From: Michal X-Mailer: Mozilla 4.6 [en] (Win98; I) X-Accept-Language: en MIME-Version: 1.0 To: djgpp AT delorie DOT com Subject: Re: bits and flags References: <01beca3f$da040700$LocalHost AT thendren> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Reply-To: djgpp AT delorie DOT com Christopher Nelson wrote: > > -----Original Message----- > From: Darren Noble > To: djgpp AT delorie DOT com > Date: Thursday, July 08, 1999 3:16 AM > Subject: Re: bits and flags > > >On Thu, 08 Jul 1999, you wrote: > >> Lets say I have > >> char ch=1; > >> > >> Now I can test if a bit is "on" > >> if(ch&1) > >> ....... > >> > >> but how can I set a bit.. Lets say bit 4? > >> and how can I "turn off" a bit? > > > >If you take 2 to the 4th power witch is 16, you can say: > > > > ch-=16; > > > >and that will turn of the 4th bit if it is on. If it is off and you want > it on > >you can go > > > > ch+=16; > > > >so basicly you add or subtract 2 to the power of the bit you want. > > or, if you like assembler you can use "setb" and friends. > in addition, OR'ing allows you to set a bit, and you can also AND a bit out > with a mask. using logical bitwise operations are usually faster than > adding and subtracting. Not true, i don't know about other processors but pentium and higher (which is the platform of djgpp) execute them all at the same speed, which is in perfect conditions two instructions per clock on pentium and pentium MMX and two or one (depending on operands types) instruction for pentium pro and pentium II, also in both you can use registers or immediate so there are no speed differences. > > e.g. > > a|=2; set bit #1 of 0-7 bits. > a&=0xfd; clear bit #1 of 0-7 bits.