home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #20 / NN_1992_20.iso / spool / comp / lang / c / 13568 < prev    next >
Encoding:
Internet Message Format  |  1992-09-11  |  1.8 KB

  1. Path: sparky!uunet!sun-barr!olivea!spool.mu.edu!sdd.hp.com!think.com!spdcc!dirtydog.ima.isc.com!karl
  2. From: karl@ima.isc.com (Karl Heuer)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Sets in C
  5. Message-ID: <1992Sep11.230445.5940@ima.isc.com>
  6. Date: 11 Sep 92 23:04:45 GMT
  7. References: <14390@goanna.cs.rmit.oz.au> <kjb.716185475@godzilla.cgl.citri.edu.au> <1992Sep11.165838.3382@taumet.com>
  8. Sender: usenet@ima.isc.com (news)
  9. Organization: Interactive Systems, Cambridge, MA 02138-5302
  10. Lines: 27
  11.  
  12. In article <1992Sep11.165838.3382@taumet.com> steve@taumet.com (Steve Clamage) writes:
  13. >The C Standard allows an implementation to restrict the size of
  14. >bitfields to the size of an int.
  15.  
  16. This is true, and possible a correct response to the immediate parent of your
  17. article, but somewhere along the thread some confusion seems to have seeped
  18. in.  The original article was asking about implementing sets, and oversized
  19. bitfields wouldn't address that anyway.%
  20.  
  21. It *is* true that you can have more than 32 single-bit fields in a struct, and
  22. this would be a way to implement sets as long as you only need to test for
  23. constants:
  24.     struct FruitBasket { unsigned apple : 1; unsigned orange : 1; ... };
  25.  
  26. But since it's illegal to have bitfield arrays (sigh), I think it's more
  27. likely that one or more of the people who used the term "bitfield" were
  28. actually talking about doing the operations on ints:
  29.     typedef unsigned long Set;
  30.     #define test(s, x) (((s) & (1<<(x))) != 0)
  31.  
  32. I believe it's already been noted that this model can be extended to sets over
  33. a larger universe by using an array of an integral type.
  34.  
  35. Karl W. Z. Heuer (karl@ima.isc.com or uunet!ima!karl), The Walking Lint
  36. ________
  37. % Unless someone is incorrectly assuming that struct{int:100} would give you
  38.   a BigNum that you could shift and mask like a normal-sized int.
  39.