-2

这是我尝试过的:

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

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

上面的循环结果是无限的。有没有办法修复它,让它做它打算做的事情?

4

3 回答 3

7

只需使用unsignedfor i,而不是int. 它们保证具有相同的大小,并且有符号整数的右移是实现定义的(但通常会在符号位中移动)。并且不要忘记将结果除以CHAR_BIT保证为 8)。

于 2013-07-08T08:50:38.493 回答
2

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

于 2013-07-08T08:48:38.380 回答
-1

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

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

于 2013-07-08T09:43:16.613 回答