一种查找存储signed int所需位数的方法

时间:2015-10-11 08:42:45

标签: c++ c

我想知道是否有办法找到存储有符号整数所需的位数而不使用比较运算符和任何循环或特殊函数。

只需使用! | << >> +和其他二元运算符。

3 个答案:

答案 0 :(得分:8)

  

我想知道是否有办法找到需要多少位   存储有符号整数

sizeof(signed int) * CHAR_BIT

说明:假设一个字节需要8位是错误的。您必须使用<climits><limits.h>中定义的CHAR_BIT macro来找出正确的数字。

答案 1 :(得分:0)

#include <limits>
#include <type_traits>

template<typename T>
typename std::enable_if<std::is_signed<T>::value, unsigned>::type
bits_to_store_signed_int() { return 1+std::numeric_limits<T>::digits; }

说明:问题是存储有符号整数所需的位数,而不是signed int(又名int)。 signed charshort intlong intlong long int中的每一个都是其他有符号整数类型。这会计算所有这些尺寸。或者,如果您知道相关类型,请使用

1+std::numeric_limits<some_signed_integer_type>::digits;

答案 2 :(得分:-2)

这对你好吗? sizeof(signed) * 8,这将为您提供以字节为单位的大小,每个字节为8位,因此您将获得有符号整数的位数。