From 3199a01b45fe16e540800fb73f69b4188d6e70ff Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 22 Oct 2005 16:38:15 +0000 Subject: [PATCH] Noticed recently that bitcount16() isn't 16-bit clean due to signed shift right. It doesn't actually matter in the current code since the input word only ever uses the bottom 9 bits, but if I ever extended Mines to work in a triangular grid then all 16 bits might be required. Fix this now, while I'm cleaning things up, so that it won't bite me unexpectedly in future. git-svn-id: svn://svn.tartarus.org/sgt/puzzles@6415 cda61777-01e9-0310-a592-d414129be87e --- mines.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mines.c b/mines.c index 4210b56..b9bb7c9 100644 --- a/mines.c +++ b/mines.c @@ -275,14 +275,16 @@ static char *validate_params(game_params *params, int full) /* * Count the bits in a word. Only needs to cope with 16 bits. */ -static int bitcount16(int word) +static int bitcount16(int inword) { + unsigned int word = inword; + word = ((word & 0xAAAA) >> 1) + (word & 0x5555); word = ((word & 0xCCCC) >> 2) + (word & 0x3333); word = ((word & 0xF0F0) >> 4) + (word & 0x0F0F); word = ((word & 0xFF00) >> 8) + (word & 0x00FF); - return word; + return (int)word; } /* -- 2.11.0