Linux基本資料型別大小——int,char,long int,long long int(/usr/include/limit.h檔案對Linux下資料型別的限制及儲存位元組大小的說明)
阿新 • • 發佈:2019-01-25
/* We don't have #include_next. Define ANSI <limits.h> for standard 32-bit words. */
/* These assume 8-bit 'char's, 16-bit 'short int's, and 32-bit 'int's and 'long int's. */
1.char資料型別
char型別資料所佔記憶體空間為8位。其中有符號字元型變數取值範圍為?128~127,無符號型字元變數取值範圍為0~255.其限制如下:
/* Number of bits in a 'char'. */
# define CHAR_BIT 8 //所佔位元組數
/* Minimum and maximum values a 'signed char' can hold. */ //有符號字元型範圍
# define SCHAR_MIN (-128)
# define SCHAR_MAX 127
/* Maximum value an 'unsigned char' can hold. (Minimum is 0.) */ //無符號字元型範圍
# define UCHAR_MAX 255
/* Minimum and maximum values a 'char' can hold. */
# ifdef __CHAR_UNSIGNED__
# define CHAR_MIN 0
# define CHAR_MAX UCHAR_MAX
# else
# define CHAR_MIN SCHAR_MIN
# define CHAR_MAX SCHAR_MAX
# endif
2.short int資料型別
short int型別資料所佔記憶體空間為16位。其中有符號短整型變數取值範圍為?32768~32767,無符號短整型變數取值範圍為0~65535.其限制如下:
/* Minimum and maximum values a 'signed short int' can hold. */ // 有符號短整型範圍
# define SHRT_MIN (-32768)
# define SHRT_MAX 32767
/* Maximum value an 'unsigned short int' can hold. (Minimum is 0.) */
// 無符號短整型範圍
# define USHRT_MAX 65535
3.int資料型別int型別資料所佔記憶體空間為32位。其中有符號整型變數取值範圍為-2147483648~2147483647,無符號型整型變數取值範圍為0~4294967295U.其限制如下:
/* Minimum and maximum values a 'signed int' can hold. */ //整形範圍
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
/* Maximum value an 'unsigned int' can hold. (Minimum is 0.) */
//無符號整形範圍# define UINT_MAX 4294967295U
4.long int資料型別
隨著巨集__WORDSIZE值的改變,long int資料型別的大小也會發生改變。如果__WORDSIZE的值為32,則long int和int型別一樣,佔有32位。在Linux GCC4.0-i386版本中,預設情況下__WORDSIZE的值為32.其定義如下:
//come from /usr/include/bits/wordsize.h
#define __WORDSIZE 32
在64位機器上,如果__WORDSIZE的值為64, long int型別資料所佔記憶體空間為64位。其中有長整型變數取值範圍為-9223372036854775808L~9223372036854775807L,無符號長整型變數取值範圍為0~18446744073709551615UL.其限制如下:
/* Minimum and maximum values a 'signed long int' can hold. */ //有符號長整形範圍
# if __WORDSIZE == 64
# define LONG_MAX 9223372036854775807L
# else
# define LONG_MAX 2147483647L
# endif
# define LONG_MIN (-LONG_MAX - 1L)
/* Maximum value an 'unsigned long int' can hold. (Minimum is 0.) *///無符號長整形範圍
# if __WORDSIZE == 64
# define ULONG_MAX 18446744073709551615UL
# else
# define ULONG_MAX 4294967295UL
# endif
5.long long int資料型別
在C99中,還定義了long long int資料型別。其資料型別限制如下:
# ifdef __USE_ISOC99
/* Minimum and maximum values a 'signed long long int' can hold. *///無符號長長整形範圍
# define LLONG_MAX 9223372036854775807LL
# define LLONG_MIN (-LLONG_MAX - 1LL)
/* Maximum value an 'unsigned long long int' can hold. (Minimum is 0.) *///有符號長長整形範圍
# define ULLONG_MAX 18446744073709551615ULL
# endif /* ISO C99 */
/* These assume 8-bit 'char's, 16-bit 'short int's, and 32-bit 'int's and 'long int's. */
1.char資料型別
char型別資料所佔記憶體空間為8位。其中有符號字元型變數取值範圍為?128~127,無符號型字元變數取值範圍為0~255.其限制如下:
/* Number of bits in a 'char'. */
# define CHAR_BIT 8 //所佔位元組數
/* Minimum and maximum values a 'signed char' can hold. */ //有符號字元型範圍
# define SCHAR_MIN (-128)
# define SCHAR_MAX 127
/* Maximum value an 'unsigned char' can hold. (Minimum is 0.) */ //無符號字元型範圍
# define UCHAR_MAX 255
/* Minimum and maximum values a 'char' can hold. */
# ifdef __CHAR_UNSIGNED__
# define CHAR_MIN 0
# define CHAR_MAX UCHAR_MAX
# else
# define CHAR_MIN SCHAR_MIN
# define CHAR_MAX SCHAR_MAX
# endif
2.short int資料型別
short int型別資料所佔記憶體空間為16位。其中有符號短整型變數取值範圍為?32768~32767,無符號短整型變數取值範圍為0~65535.其限制如下:
/* Minimum and maximum values a 'signed short int' can hold. */ // 有符號短整型範圍
# define SHRT_MIN (-32768)
# define SHRT_MAX 32767
/* Maximum value an 'unsigned short int' can hold. (Minimum is 0.) */
// 無符號短整型範圍
# define USHRT_MAX 65535
3.int資料型別int型別資料所佔記憶體空間為32位。其中有符號整型變數取值範圍為-2147483648~2147483647,無符號型整型變數取值範圍為0~4294967295U.其限制如下:
/* Minimum and maximum values a 'signed int' can hold. */ //整形範圍
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
/* Maximum value an 'unsigned int' can hold. (Minimum is 0.) */
//無符號整形範圍# define UINT_MAX 4294967295U
4.long int資料型別
隨著巨集__WORDSIZE值的改變,long int資料型別的大小也會發生改變。如果__WORDSIZE的值為32,則long int和int型別一樣,佔有32位。在Linux GCC4.0-i386版本中,預設情況下__WORDSIZE的值為32.其定義如下:
//come from /usr/include/bits/wordsize.h
#define __WORDSIZE 32
在64位機器上,如果__WORDSIZE的值為64, long int型別資料所佔記憶體空間為64位。其中有長整型變數取值範圍為-9223372036854775808L~9223372036854775807L,無符號長整型變數取值範圍為0~18446744073709551615UL.其限制如下:
/* Minimum and maximum values a 'signed long int' can hold. */ //有符號長整形範圍
# if __WORDSIZE == 64
# define LONG_MAX 9223372036854775807L
# else
# define LONG_MAX 2147483647L
# endif
# define LONG_MIN (-LONG_MAX - 1L)
/* Maximum value an 'unsigned long int' can hold. (Minimum is 0.) *///無符號長整形範圍
# if __WORDSIZE == 64
# define ULONG_MAX 18446744073709551615UL
# else
# define ULONG_MAX 4294967295UL
# endif
5.long long int資料型別
在C99中,還定義了long long int資料型別。其資料型別限制如下:
# ifdef __USE_ISOC99
/* Minimum and maximum values a 'signed long long int' can hold. *///無符號長長整形範圍
# define LLONG_MAX 9223372036854775807LL
# define LLONG_MIN (-LLONG_MAX - 1LL)
/* Maximum value an 'unsigned long long int' can hold. (Minimum is 0.) *///有符號長長整形範圍
# define ULLONG_MAX 18446744073709551615ULL
# endif /* ISO C99 */