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