=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Date: Tue, 18 Apr 2000 06:28:57 From: Nikolai Golovchenko <golovchenko-at-mail.ru> To: pic microcontroller discussion list <PICLIST-at-mitvma.mit.edu> Subject: Re: Favorite C Bugs (was: "Re: Question: C vs Asm") [OT] -------------------------------------------------------------------------------- Right shift is still faster than divide... How about fixing it by adding 1 to the dividend before shifts if the dividend is negative: -1/2 = 0 (-1+1) >> 1 = 0 -2/2 = -1 (-2+1) >>1 = -1 -3/2 = -1 (-3+1) >> 1 = -1 ... Results are identical. Nikolai http://techref.massmind.org/member/NG--944 Sunday, April 16, 2000, 8:47:49 AM, you wrote: > On Fri, Apr 14, 2000 at 10:32:11PM -0700, Andrew Warren wrote: >> Not ALWAYS when x is a signed value, no... But doesn't the ANSI > Not ever when x is a signed value, even for a signed right shift. > Think about it: if you right shift -1 by 2, what is your result? > Divide -1 by 4 and what is your result? > There is one exception where you can use a signed right shift > in place of a signed divide; if you know that the dividend is > an exact multiple of the divisor. Otherwise, you can't do it. > Regards, Clyde > -- > Clyde Smith-Stubbs | HI-TECH Software > Email: clyde-at-htsoft.com | Phone Fax > WWW: http://www.htsoft.com/ | USA: (408) 490 2885 (408) 490 2885 > PGP: finger clyde-at-htsoft.com | AUS: +61 7 3355 8333 +61 7 3355 8334 > --------------------------------------------------------------------------- > HI-TECH C: compiling the real world. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Date: Sun, 16 Apr 2000 08:47:49 From: Clyde Smith-Stubbs <clyde-at-HTSOFT.COM> To: PICLIST-at-mitvma.mit.edu Subject: Re: Favorite C Bugs (was: "Re: Question: C vs Asm") [OT] -------------------------------------------------------------------------------- On Fri, Apr 14, 2000 at 10:32:11PM -0700, Andrew Warren wrote: > Not ALWAYS when x is a signed value, no... But doesn't the ANSI Not ever when x is a signed value, even for a signed right shift. Think about it: if you right shift -1 by 2, what is your result? Divide -1 by 4 and what is your result? There is one exception where you can use a signed right shift in place of a signed divide; if you know that the dividend is an exact multiple of the divisor. Otherwise, you can't do it. Regards, Clyde -- Clyde Smith-Stubbs | HI-TECH Software Email: clyde-at-htsoft.com | Phone Fax WWW: http://www.htsoft.com/ | USA: (408) 490 2885 (408) 490 2885 PGP: finger clyde-at-htsoft.com | AUS: +61 7 3355 8333 +61 7 3355 8334 --------------------------------------------------------------------------- HI-TECH C: compiling the real world. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Date: Sat, 15 Apr 2000 08:04:14 From: Clyde Smith-Stubbs <clyde-at-HTSOFT.COM> To: PICLIST-at-MITVMA.MIT.EDU Subject: Re: Favorite C Bugs (was: "Re: Question: C vs Asm") [OT] -------------------------------------------------------------------------------- On Fri, Apr 14, 2000 at 08:01:16PM -0700, rleggitt-at-concentric.net wrote: > Trival example: you know and I know that "x/8" is the same as "x>>3". But Not when x is a signed value, it ain't. -- Clyde Smith-Stubbs | HI-TECH Software Email: clyde-at-htsoft.com | Phone Fax WWW: http://www.htsoft.com/ | USA: (408) 490 2885 (408) 490 2885 PGP: finger clyde-at-htsoft.com | AUS: +61 7 3355 8333 +61 7 3355 8334 --------------------------------------------------------------------------- HI-TECH C: compiling the real world.