c语言中 unsigned int 类型数~0,如何左移为 0

在左移次数大于或等于类型宽度时,左移的次数变为:次数%类型宽度。所以11111111111111111111111111111111左移31位是:100000000000... 在左移次数大于或等于类型宽度时,左移的次数变为:次数%类型宽度。
所以
1111 1111 1111 1111 1111 1111 1111 1111 左移31位是:
1000 0000 0000 0000 0000 0000 0000 0000
左移32位相当于,不移动(32%32 == 0),还是:
1111 1111 1111 1111 1111 1111 1111 1111
那么如果要移成:
0000 0000 0000 0000 0000 0000 0000 0000

如何移动啊?
展开
 我来答
金色潜鸟
推荐于2016-09-17 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5717万
展开全部
unsigned int 左移32位相当于不移动。
移位运算,要求移位结果至少保留一位原来的数字,也就是说 32 位,最多左移或右移31位,超出31位 得到的数据 是无意义的。
0xffffffff 左移31位是 0x80000000.
没有办法移动成 32位 全0。(除非使用的编译器另有规定)。
-----------------------------
unsigned int a=0xffffffff;
printf("%#x %#x %#x %#x\n",a,a<<31,a<<32, a>>32 );
MS VC++ 6.0 输出 是:
0xffffffff 0x80000000 0xffffffff 0xffffffff
mr_shj
2015-04-26 · TA获得超过2682个赞
知道大有可为答主
回答量:1665
采纳率:94%
帮助的人:1387万
展开全部
上一种描述是正确的

unsigned int i=1;
i<<1 0000 0000 0000 0010
i<<2 0000 0000 0000 0100
i<<7 0000 0000 1000 0000
i<<15 1000 0000 0000 0000

i<<16 0000 0000 0000 0000
i<<17 0000 0000 0000 0000
追问
你好,在我的机器上,
左移16位会变成0000 0000 0000 0001

左移17位会变成0000 0000 0000 0010
好像,编译器会重新计算左移次数
追答
与不同的编译器相关,我的是不会计算的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式