c - Hvorfor den høje del af den fysiske adressestruktur er defineret som signeret type?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg ser, at en fysisk adressestruktur er defineret som denne:


typedef union {
   struct {
       ULONG LowPart;
       LONG HighPart;
   } u;
   LONGLONG QuadPart;
} PHYSICAL\_ADDRESS;


Jeg forstår ikke hvorfor den høje del er defineret som signeret type ... Kan nogen give en forklaring?

Bedste reference


Nummeret er underskrevet for at gøre matematik på det mere fornuftigt. Hvis du trækker adressen 123 fra 456, forventer du at få adressen 333, ikke? Så hvis du trækker 456 fra 123, forventer du at få -333, ikke 18.446.744.073.709.551.283, right? Det er derfor, adresserne er underskrevet.


Grunden til, at kun den høje del er underskrevet, er, at et tal kun har en tegnbit, og det er altid den højeste (mest signifikante) bit.