446,148 Members | 1,373 Online
Need help? Post your question and get tips & solutions from a community of 446,148 IT Pros & Developers. It's quick & easy.

# Mistake in solutions to K&R?

 P: n/a This post lists a possible error in the solution to Exercise 2-7, page 49 (K&R) on the webpage http://users.powernet.co.uk/eton/kandr2/krx207.html Question: Write a function invert(x,p,n) that returns x with the n bits that begin at position p inverted (i.e., 1 changed into 0 and vice versa), leaving the others unchanged. The return statement on the webpage is return x ^ (~(~0U << n) << p); which is (possibly) incorrect; I've made the following one which is correct (please correct me if it isn't): return x^((~(~0U<<(p+1))>>(p+1-n))<<(p+1-n)); Explanation: Take a number 1 1000 1000, say, and p=7 and n=4 then the answer should be 1 0111 1000 In the original code the following steps take place: 1) 0000 0000 0000 0000 0000 0000 0000 0000 //0U 2) 1111 1111 1111 1111 1111 1111 1111 1111 //~ 3) 1111 1111 1111 1111 1111 1111 1111 0000 //<>p+1-n 6) 0000 0000 0000 0000 0000 0000 1111 0000 //<
4 Replies

 P: n/a poodles said: This post lists a possible error in the solution to Exercise 2-7, page 49 (K&R) on the webpage http://users.powernet.co.uk/eton/kandr2/krx207.html I have no control over that site any more, so I can't make any corrections that may be necessary. http://www.clc-wiki.net/ has taken over the maintenance of the answers page. The relevant page is http://www.clc-wiki.net/wiki/K%26R2_...2%3AExercise_7 -- Richard Heathfield "Usenet is a strange place" - dmr 29/7/1999 http://www.cpax.org.uk email: rjh at above domain (but drop the www, obviously) Jun 27 '06 #2

 P: n/a In article <11**********************@i40g2000cwc.googlegroups .com> "poodles" writes: This post lists a possible error in the solution to Exercise 2-7, page 49 (K&R) on the webpage http://users.powernet.co.uk/eton/kandr2/krx207.html Question: Write a function invert(x,p,n) that returns x with the n bits that begin at position p inverted (i.e., 1 changed into 0 and vice versa), leaving the others unchanged. The return statement on the webpage is return x ^ (~(~0U << n) << p); Should be x ^ (~(~0U << n) << (p + 1 - n)). -- dik t. winter, cwi, kruislaan 413, 1098 sj amsterdam, nederland, +31205924131 home: bovenover 215, 1025 jn amsterdam, nederland; http://www.cwi.nl/~dik/ Jun 27 '06 #3

 P: n/a On Tue, 27 Jun 2006 10:22:43 +0000, in comp.lang.c , Richard Heathfield wrote: poodles said: This post lists a possible error in the solution to Exercise 2-7, page 49 (K&R) on the webpage http://users.powernet.co.uk/eton/kandr2/krx207.htmlI have no control over that site any more, so I can't make any correctionsthat may be necessary. In that case, is there some way to get the site dropped? It seems risky to have your name attached to something you no longer control. -- Mark McIntyre "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." --Brian Kernighan Jun 27 '06 #4

 P: n/a Mark McIntyre said: On Tue, 27 Jun 2006 10:22:43 +0000, in comp.lang.c , Richard Heathfield wrote:poodles said: This post lists a possible error in the solution to Exercise 2-7, page 49 (K&R) on the webpage http://users.powernet.co.uk/eton/kandr2/krx207.htmlI have no control over that site any more, so I can't make any correctionsthat may be necessary. In that case, is there some way to get the site dropped? It seems risky to have your name attached to something you no longer control. It doesn't seem to have done me any harm, except for situations such as the current one. Asking the provider to drop the site is likely to break quite a few live links on other sites, and I'm loathe to initiate that process (although I know it's bound to happen anyway, eventually). -- Richard Heathfield "Usenet is a strange place" - dmr 29/7/1999 http://www.cpax.org.uk email: rjh at above domain (but drop the www, obviously) Jun 27 '06 #5

### This discussion thread is closed

Replies have been disabled for this discussion.