如何确定int中的位数

时间:2013-07-08 08:45:00

标签: c++ c sizeof

这就是我的尝试:

int i=-1,size=1;
while (i>>1)
    size++;
printf("%d",size);

目标是在不使用int运算符的情况下确定sizeof的大小。

上述循环证明是无限的。有没有办法解决它,以便它做它想做的事情?

3 个答案:

答案 0 :(得分:7)

只需使用unsigned代替i,而不是int。他们是 保证具有相同的大小,并且有符号整数的右移是实现定义的(但通常会在符号位中移位)。别忘了分裂 CHAR_BIT的结果(保证为8)。

答案 1 :(得分:2)

您为右移选择了一个负数 右移一个负数,它会被符号位1填充(或不符合实现),所以你的值永远不会是0(= false),这意味着你得到的是你所抱怨的无限循环。

答案 2 :(得分:-1)

你的循环确实是无限的。 从i = 1开始并向左移动直到你到达i = 0并停止。你有位。

-edit --- 这将适用于有符号和无符号整数。