如何用位运算符(~)和数据运算符(-)来计算表示n + 1和n
来源:互联网 发布:淘宝店铺认证复核2017 编辑:程序博客网 时间:2024/05/01 11:30
今天做笔试题时碰到的,一脸懵逼,在网上查了查,发现原来是这样的
原文地址:http://blog.chinaunix.net/uid-31439230-id-5763282.html
由题目可知,我们只能用位运算符~和数据运算符-来计算表示n + 1 和n - 1,首先我们必须清楚位运算符~和数据运算符-的作用:
位运算符~:为按位取反运算符数据运算符-:将一个数设为负数
我们都知道正数和负数都是以补码的形式存在内存中,正数的原码、反码和补码都是自己本身,而负数的反码是原码按位取反,补码则等于反码+1。
所以我们可以这样理解,负数以补码的形式存在内存中,补码的值为原码取反加1。看到这句话,我相信大家应该知道怎么去用这个“-”数据运算符。
“~”位运算符是数据按位取反的作用,“-”数据运算符是数据按位取反加1。
大家思考一下:一个数按位取反之后再按位取反一次是不是没有变化?答案是肯定没有变化的。 相信不用我再多说了,大家心里都有了n + 1用“~”和“-”表示的答案了。
没错,答案就是:n + 1 <=> -(~n)
有疑问的同学可以一起验证一下:如十进制数30,其二进制原码为:0001 1110
~(0001 1110) => 1110 0001
-(1110 0001) => ~(1110 0001) + 1 => (0001 1110) + 1 => 0001 1111 = 31
那么n - 1该怎么表示呢?
根据上面的讲解,同理可得: n - 1 <=> ~(-n)
对这个答案有疑问的同学,可以自己随便设一个数验证一下。
其实也可以用数学证明验证一下:
已知:
①-n = ~n + 1 => ~n = -n-1
设x = -n;
由①得:~x = -x-1
进而得~(-n) = -(-n) -1 => ~(-n) = n-1;
阅读全文
0 0
- 如何用位运算符(~)和数据运算符(-)来计算表示n + 1和n
- ifelse 和三目运算符 和 n++ , ++n
- 如何用八进制和十六进制来表示整形数据
- 位移运算符和位运算符的计算
- 位运算---计算整数的N次方
- 位运算n & (n-1)的妙用
- 位运算n&(n-1)的使用
- 位运算n & (n-1)的妙用
- 位运算符和位运算
- 位运算符和位运算
- 位运算符和位运算
- 位运算符和位运算
- 位运算符和位运算
- 位运算符和位运算
- 位运算符和位运算
- 位运算符和位运算
- 位运算符和位运算
- n皇后 位运算
- Lua爬坑手记
- [转]QImage的浅拷贝与深拷贝 -- Deep Copy
- [转]CSDN-markdown编辑器语法——字体、字号与颜色
- 超级字符串
- html03-盒子模式
- 如何用位运算符(~)和数据运算符(-)来计算表示n + 1和n
- 点九图的制作方法
- java作用域public protected private,以及不写时的区别
- 01 Hibernate测试
- linux中class_create和class_register说明
- Kaggle竞赛:泰坦尼克号灾难数据分析简单案例
- LeetCode
- 虚拟机文件共享
- EDA与VHDL作业(2)