Für Portabilität Sie nutzen könnten:
limits.h
#define LNG_BIT (sizeof(long) * CHAR_BIT)
unsigned long num = 1UL << (LNG_BIT - 1);
Um "niedrig int", so etwas wie ?:
#define INT_BIT (sizeof(int) * CHAR_BIT)
if (LNG_BIT > INT_BIT)
return num & (~0UL >> INT_BIT);
else
return num;
oder
num &= ~(~0U << INT_BIT);
Oder verwenden Sie Maske, etc. Kommt darauf an, warum, für was usw. Sie wollen die int Bits.
Beachten Sie auch die Optionen von Compilern; I.e. wenn Sie gcc verwenden:
-m32
-m64
-mx32
generieren Code für einen 32-Bit- oder 64-Bit-Umgebung
* Die Option -m32 legt Int, Long und Pointer-Typen auf 32 Bit fest und generiert Code, der auf einem beliebigen i386-System ausgeführt wird.
* Die Option -m64 setzt Int auf 32 Bit und Long und Zeigertypen auf 64 Bit und generiert Code für die x86-64-Architektur. Für Darwin werden nur die Optionen -fno-pic und -mdynamic-no-pic deaktiviert.
* Die -mx32 Option setzt int, lang, und Zeigertypen zu 32 Bits und erzeugt einen Code für die x86-64 Architektur.
Es gibt auch -maddress-mode=long
usw.
-maddress-mode = lange
Code generiert für langen Adressmodus. Dies wird nur für 64-Bit- und x32-Umgebungen unterstützt. Dies ist der Standardadressmodus für 64-Bit-Umgebungen.
Versuchen: 'unsigned long num = 1UL << 63;' – Mysticial
@Mysticial Warum nicht schreiben, dass als eine Antwort zusammen mit der ganzen Zahl Förderung Sachen? – cnicutar
Hängt davon ab, welcher Compiler verwendet wird. Viele Legacy-Compiler würden standardmäßig 32 Bit lang sein, selbst wenn sie auf einer 64-Bit-Maschine laufen. Bestätigen Sie, dass "sizeof num" 8 ist, bevor Sie etwas mehr versuchen. – wallyk