如何查找数据类型的范围
How to find rangeof data type.?
如何在不使用sizeof运算符或任何内置函数的情况下查找任何数据类型的范围?我正在使用逻辑将所有位分配给可用的位,然后打印它来尝试它。
您是否正在寻找
<limits>
numeric_limits<int>::min
和numeric_limits<int>::max
?
以下答案是不可移植的(它期望负数的二进制补码),但它可能是您正在寻找的:
unsigned_int_type UMAX = (unsigned_int_type) -1;
unsigned_int_type UMIN = 0;
signed_int_type MAX = (signed_int_type) (UMAX / 2);
signed_int_type MIN = (signed_int_type) (UMAX / 2 + 1);
例如
#include <stdio.h>
int main(void)
{
unsigned long UMAX = (unsigned long) -1;
unsigned long UMIN = 0;
signed long MAX = (signed long) (UMAX / 2);
signed long MIN = (signed long) (UMAX / 2 + 1);
printf("UMAX = %lun", UMAX);
printf("UMIN = %lun", UMIN);
printf("MAX = %lin", MAX);
printf("MIN = %lin", MIN);
return 0;
}
UMAX = 18446744073709551615
UMIN = 0
MAX = 9223372036854775807
MIN = -9223372036854775808
您可以计算位数(假设我们不是在谈论浮点数或结构),例如
-
将所有位设置为 1
-
保持按位升移所有数据,直到值为零
不要降档,因为这可能会导致标志扩展。
所以喜欢;
mytype value = ~0; // set all bits to one using first compliment
int numberOfBits = 0;
while (value) {
numberOfBits += 1;
value <<= 1; // upshift
}
您现在有了位数,并且如果类型是有符号的还是无符号的,则范围为
0 .. (2^numberOfBits-1)
或
-2^(numberOfBits-1)..(2^(numberOfBits-1)-1)
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何计算数据类型的范围,例如int
- C++数据类型 s 及其范围
- C++,"由于数据类型范围有限,比较总是正确的"
- C++中最大的数据类型范围
- 在 c++ 中确定某个值是否在该数据类型的最大范围内
- 当数字可能超出C++中特定数据类型的范围时如何处理异常?
- OpenCV-浮动数据类型和强度范围在0-255范围内的RGB通道
- 运算符重载中变量的数据类型和范围应该是什么
- 小数、双精度、整数等数据类型的范围
- 32位或64位操作系统如何影响数据类型范围
- GCC:由于数据类型范围有限,比较始终为真 - 在模板参数中
- 如何查找数据类型的范围
- 用于确定有符号和无符号数据类型C++的范围的公式
- 由于数据类型的范围有限,比较总是错误的
- "Float"数据类型的范围值(以C++为单位)
- 根据什么决定任何数据类型的大小和范围
- 我正在尝试查找这些数据类型的范围