按位取反的一些问题
来源:互联网 发布:淘宝自动评价加分吗 编辑:程序博客网 时间:2024/06/16 22:23
最近,一直在被~这个运算符困惑,所以今天认真搞了一稿其原理性的东西,也让我觉得是应该好好学习计算机的基础知识啊。
了解按位取反之前我们需要了解一下将十进制的负数转化为二进制,在了解这个之前我们又需要了解一下原码、反码、补码。
原码:二进制的定点数,最高位为符号位,0是正数,1是负数,其优点是很直观的反应出来二进制数,假如2的二进制数是0…0010,-2的二进制数是1…0010,但是真如这样这样的运算容易出错,比如0…0010 + 1…0001的话为-3,但是十进制中是2+1,结果为3
反码:是数据存储的一种,其算法就是将其原码的进行按位取反,按位取反的意思是说每一位取其相反,也是就说2的二进制为…0010,按位取反后为…1101,但是符号位不变。
补码:计算机中,数值全部用补码来存储,补码的作用可以将符号位和数值域统一处理,加法与减法统一处理,补码就是在其相反数的所有位数按位取反的基础上进行+1的运算,这就完成补码的运算。
以上的计算步骤就是负数的这些反码,补码的运算方式,然而正数的反码原码补码都是一样的。
理论看完,下面来一些例子:
-2的原码1…0010,反码1…1101,补码是1…1110;
所以16的补码为其原码:为0…0001 0000,-8的补码为:1…1000,
我们再来看~运算符,这个运算符是按位取反运算符,看几个例子来理解下:
~2的运算步骤
2的补码是0…0010,
对其进行按位取反1…1101,
转为原码:
除去符号位进行按位取反1…0010,再进行+1再进行转化为10进制,所以会得到-3
代码验证:
console.log(~2); // -3
9的补码是0…1001,
对其进行按位取反1…0110,
转为原码:
除去符号位按位取反1…1001,再进行+1在进行转化为10进制,所以会得到-10
代码验证:
console.log(~9); // -10
-9的补码是1…10111,
对其进行按位取反0…01000,转为10进制,所以会得到8
代码验证:
console.log(~-9); // 8
- 按位取反的一些问题
- hbm2java的一些问题
- 用友的一些问题
- 电子商务的一些问题
- 一些问题的解答!
- 一些奇怪的问题
- 登录的一些问题
- 一些问题的解决
- C的一些问题
- C的一些问题
- socket的一些问题
- C#的一些问题
- 一些问题的总结
- EDI的一些问题
- PowerDesign的一些问题
- SubVersion 的一些问题
- CEGUI 的一些问题
- 一些基础性的问题
- 垃圾收集 Garbage Collection
- PHP 页面抓取技术
- 关闭 RichTextBox 中 AutoWordSelection 的自动选词功能
- CCI 习题笔记 1
- 工厂模式
- 按位取反的一些问题
- CCI 复习笔记 2
- python(1) python基础
- python (2)数据结构总结
- 冒泡排序
- 二分查找算法
- MITK简介及安装
- div罩层缓慢向下移动 模拟 慢速加载网页
- 【转】mac x Yosemide(10.10) 下安装 jdk 1.7 (jdk 1.8) 要求Mac OS X10.7.3或更高版本解决