这是我尝试过的:
int i=-1,size=1;
while (i>>1)
size++;
printf("%d",size);
int
目标是在不使用运算符的情况下确定大小sizeof
。
上面的循环结果是无限的。有没有办法修复它,让它做它打算做的事情?
只需使用unsigned
for i
,而不是int
. 它们保证具有相同的大小,并且有符号整数的右移是实现定义的(但通常会在符号位中移动)。并且不要忘记将结果除以CHAR_BIT
(不保证为 8)。
您选择了一个负数进行右移。
右移一个负数,它会被符号位 1 填充(或不填充,取决于实现),所以你的值永远不会是 0(=false),这意味着你得到的正是你抱怨的无限循环。
你的循环确实是无限的。从 i = 1 开始向左移动,直到到达 i =0 并停止。你有位。
-edit--- 这将适用于有符号和无符号整数。