【C】x&(-x)的返回结果分析

来源:互联网 发布:樱井知香全部影片 编辑:程序博客网 时间:2024/05/04 06:39

对于任意一个整数,x&(-x)表示x与-x按位与,其结果如下(这里假设为正整数或0,对于负整数,结论显然是一样的):

  1. 若x为奇数,x&-x的结果为1。

  2. 若x为0,x&-x的结果为0。

  3. 若x为偶数,且x=2m,则x&-x的结果为2m.

  4. 若x为偶数,且x=n2m,n,则x&-x的返回结果为2m.

分析:

1.x为奇数

若x为奇数,则表示x的内存单元最后一位必然为1,对x取反码则反码的最后一位为0,x的反码加1得到补码,由于最后一位原来为0,加1之后不会进位,因此补码与反码除了最后一位不一样外,其余位都一样,因此,x&-x的结果为1。
例子:x=123;
x在内存中的表示:

x         :0111 1011x的反码    :1000 0100-x        :1000 0101

这里写图片描述
x&-x=1

2.x为0

x在内存中的表示:

x     :0000 0000x的反码:1111 1111-x    :0000 0000

x为0,-x也为0,与的结果还是0.

3.x为偶数

当x为偶数时,分两种情况讨论。

1.x可表示为2m

此时,x在内存中的表示仅第m位为1,其余全部为0,x的反码除了第m位为0外,其余全部为1。x的补码除了第m位为1,0-m位全部为0,其他位与x的反码一致。
例子:x=64=26

x     :0100 0000x的反码:1011 1111-x    :1100 0000

这里写图片描述

x&-x=6

2.x可表示为x=n2m

此时x相当于y向左移n位。
例子:x=28=722

x     :0001 1100x的反码:1110 0011-x    :1110 0100

这里写图片描述
x&-x=4=22

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 婴儿多大可以竖着抱 宝宝多大可以竖着抱 婴儿多久可以竖着抱 宝宝多久可以竖着抱 婴儿多久可以竖抱 宝宝多久可以竖抱 3个月宝宝可以竖抱吗 婴儿三个月能竖着抱吗 三个月宝宝能竖抱吗 宝宝几个月能竖着抱 两个月宝宝可以竖着抱吗 两个月宝宝可以竖抱吗 几个月宝宝可以竖抱 几个月宝宝可以竖着抱 三个月宝宝可以竖着抱吗 三个月宝宝可以竖抱吗 新生儿几个月可以竖着抱 婴儿几个月可以竖着抱 婴儿什么时候可以竖着抱 婴儿什么时候可以竖抱 新生儿几个月可以竖抱 宝宝三个月可以竖着抱吗 小孩几个月可以竖着抱 宝宝什么时候可以竖着抱 宝宝什么时候可以竖抱 孩子几个月可以竖着抱 小孩几个月可以竖抱 孩子几个月可以竖抱 宝宝几个月才能竖着抱 三个月的宝宝可以竖着抱吗 两个多月的宝宝可以竖着抱吗 宝宝什么时候能竖着抱 两个月的宝宝可以竖着抱吗 几个月的宝宝可以竖着抱 几个月婴儿可以竖着抱 婴儿三个月可以竖抱吗 2个月的宝宝可以竖着抱吗 小宝宝几个月可以竖着抱 婴儿两个月可以竖抱吗 婴幼儿几个月可以竖着抱 一个月的宝宝可以竖着抱吗