【C】x&(-x)的返回结果分析
来源:互联网 发布:樱井知香全部影片 编辑:程序博客网 时间:2024/05/04 06:39
对于任意一个整数,x&(-x)表示x与-x按位与,其结果如下(这里假设为正整数或0,对于负整数,结论显然是一样的):
若x为奇数,x&-x的结果为1。
若x为0,x&-x的结果为0。
若x为偶数,且
x=2m ,则x&-x的结果为2m .若x为偶数,且
x=n∗2m,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=
x :0100 0000x的反码:1011 1111-x :1100 0000
x&-x=6
2.x可表示为x=n∗2m
此时x相当于y向左移n位。
例子:
x :0001 1100x的反码:1110 0011-x :1110 0100
x&-x=4=
0 0
- 【C】x&(-x)的返回结果分析
- 【C】如果x的x次幂结果为10,计算出x的近似值
- y=x++ + ++x(int x=0)的结果?
- C++、Java和Matlab不同语言关于 y=(++x)+(++x);结果不同的问题
- x++和++x的例题分析
- x的x次幂结果为10
- c语言%X与%x的区别
- Java x=x+(x++)+(++x)分析
- X@X.X域名转向的实现(C#)
- 将整数X的第p位开始的n个位(二进制位)取反并且将结果返回
- 如果x的x次幂结果为10,你能计算出x的近似值吗?
- Apache2.x的MPM分析
- cocos2d-x的AssetsManager分析
- cocos2d-x的TestCpp分析
- cocos2d-x的定时器分析
- 对synchronized(x) 的分析
- cocos2d-x在android中响应返回键编译报错的bug分析
- Active X方法的返回值
- RocketMQ性能压测分析
- 用CSS实现JS的交互效果
- Java常量池的大概理解
- 双目测距(四)--罗德里格斯变换
- hdu5521Meeting【最短路】2015沈阳现场赛
- 【C】x&(-x)的返回结果分析
- static与final
- Java WeakReference的理解与使用
- iOS开发_部分密文显示身份证号及姓名
- POJ 1458 Common Subsequence [DP.LIS]
- js代码总报变量未定义的错
- Java 类加载顺序和{}的写法
- Java中抽象类和接口的区别
- 数据结构实验之二叉树五:层序遍历