dub*_*jim 32
#include <limits.h>
int x = INT_MAX;
Run Code Online (Sandbox Code Playgroud)
编辑:在提问者澄清之前回答,我只是猜测他们想要什么类型.
amo*_*ej1 27
有一个名为limits.h的文件(至少在Linux上有),它持有这种定义,例如
/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
# define USHRT_MAX 65535
/* 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
Run Code Online (Sandbox Code Playgroud)
到目前为止,获取无符号整数类型的最大值的最简单方法是将(-1)转换为该类型.标准(第6.2.5/9节)要求无符号数学以大于可以表示的最大值的数字模数执行,因此对于任何无符号类型T
,表达式((T)-1)
必然是该类型中可能的最大值.
另一种获取整数最大值的可移植方法:
unsigned int uMax = (unsigned int)~0;
Run Code Online (Sandbox Code Playgroud)
signed int iMax = (unsigned int)~0 >> 1;
Run Code Online (Sandbox Code Playgroud)
~0
- >将所有位设置为1>> 1
- >通过将所有位向右移位一个位置来擦除符号位(unsigned int)
在比特反转而不是使用后~0U
,将类型转换为unsigned int ,因为C没有short的后缀,char文字(一般都比int小)因此,对于最大可能的char
值 - 只需将公式类型转换为unsigned char等.
只需在max signed int expression中再次反转所有位:
signed int iMin = ~((unsigned int)~0 >> 1);
Run Code Online (Sandbox Code Playgroud)
这将第一个符号位设置为1,其余位设置为零
根据你的评论,你想要一个unsigned int
(虽然你说"无符号整数",所以也许你想要一个整数值,不一定是unsigned int
).
在C中,对于无符号整数类型,-1
当转换为该类型时,该值保证为该类型的最大值:
size_t size_max = -1;
unsigned int uint_max = -1;
unsigned long ulong_max = -1;
Run Code Online (Sandbox Code Playgroud)
分配值SIZE_MAX
,UINT_MAX
和ULONG_MAX
分别的变量.通常,您应该包含limits.h
并使用适当的宏,但很高兴知道上面的规则.此外,SIZE_MAX
不是在C89,因此size_t size_max = -1;
将在C89和C99中工作.
请注意,仅对无符号整数类型保证溢出行为.
由于这个问题有一个 C++ 标签,我建议使用 numeric_limits:
#include <limits>
unsigned x = std::numeric_limits<unsigned>::max();
Run Code Online (Sandbox Code Playgroud)