Message-Id: <33691167.755D@canvaslink.com> Date: Thu, 01 May 1997 17:55:51 -0400 From: Tom Grandgent Reply-To: tgrand AT canvaslink DOT com Organization: Canvas Link, Inc. Mime-Version: 1.0 To: Chris Croughton Cc: djgpp AT delorie DOT com Subject: Re: ints vs. shorts References: <97May1.163817gmt+0100 DOT 16679 AT internet01 DOT amc DOT de> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Precedence: bulk Chris Croughton wrote: > > I think he got that last part the wrong way round. > > short <= int <= long > > which implies that short can be the same size as long (and if > so then int is the same size as both). There are also some minima > - short has to be at least 16 bits and long at least 32 bits. Ah, that is definitely nice to know (about the minima). > In fact, don't use any predefined type for external transfers. If > you mean to write a two-byte integer, use something like: > > putc(val/256, fo); > putc(val%256, fo); > > for output and: > > int val; > val = getc(fi) * 256; > val += getc(fi); > > for input (don't try to combine them, because the order of evaluation > isn't fixed so in getc(fi)*256+getc(fi) either byte might be read first, > depending on what the compiler thought was best). Very helpful tips! I also did not know that the compiler had the freedom to alter the order of function calls when specified in that way. > >For example, I have a structure that contains the information > >for a ship in my game. Coordinates, health, fuel, all kinds of > >things like that. I am trying to determine whether it would > >be better to use ints or shorts for these sorts of things, as > >well as others. > > If you're short of memory, use short. If you want faster execution, use > int. But remember the size limitations as well - will your 'fuel' > quantities fit into 16 bits, or might you at some point want them > bigger? Even more so with coordinates - 65535 might sound like a > big number now, but will you want either longer distances or more > precision in the future? This sounds like precisely the information I have been in search of. > (For reference, a lightyear is about 1e16 metres, which is about 53 > bits; a "long long" can therefore represent about 1000 lightyears in > metres (if signed; 2000 ly if unsigned). How far does your game > range?) > > Chris Most of my values, such as fuel and coordinates, need not ever be 32 bits. I am doing a tile based game with a tile size of 32x32, and currently use a 100x100 map. The coordinate system is such that there are tile coordinates supplemented by pixel offsets (sub-tile coordinates, you could say). So even if I wanted to make an insanely large map I would not need 32 bits. I appreciate the time and effort put into your message. You have provided me with some most valuable information! Tom Grandgent tgrand AT canvaslink DOT com Canvas Link, Inc.