第一位同学写的挺好的,但一开始我没太明白为什么这样计算?,以下是学习做的笔记。

首先我们先要明白有符号整数,有符号整数的最高位表示的是符号位,0 为正数,1 为负数,例如(为方便理解,使用八位二进制):

// 十进制 => 原码

3 => 00000011

-3 => 10000011

然后是反码,正整数的反码就是它本身(原码),负整数的反码是在其本身的基础上符号位不变,再把其余各位取反。

// 十进制 => 原码 => 反码

3 => 00000011 => 00000011

-3 => 10000011 => 11111100

最后就是补码了,正整数的补码是它的原码,因此正整数的原码、反码、补码都是一样的;负整数的补码是在反码的基础上加 1 得到的。

// 十进制 => 原码 => 反码 => 补码

3 => 00000011 => 00000011 => 00000011

-3 => 10000011 => 11111100 => 11111101

上面这些概念我们理解之后,取反就很好懂了;取反是在补码的基础上进行的,因此取反运算(~n)需要将整数转为补码,之后再取反,最后转换成原码。需要注意的是,正整数的补码取反之后符号位是 1,因此这个取反后的数是一个负整数,我们需要按照负整数计算补码的方式做逆运算得到原码,例如:

3 => 00000011 => 11111100 => 11111011 => 10000100 => -4

// 1. 十进制转换成补码(00000011),需要注意正整数反码和补码是它本身

// 2. 对补码进行取反(11111100)

// 3. 把已经取反的补码转换成反码(11111011),补码转换成反码的公式:反码 = 补码 - 1

// 4. 最后把反码逆运算转换成原码(10000100),逆运算的过程是反码的符号位不变其余各位取反

// 5. 此时,结果就是 -4

负整数取反:

-3 => 10000011 => 11111100 => 11111101 => 00000010 => 2

// 1. 十进制转换成原码(10000011)

// 2. 原码转换成反码(11111100)

// 3. 反码转换成补码(11111101),公式是:补码 = 反码 + 1

// 4. 对反码进行取反(00000010),此时因为取反后的二进制数的符号位为 0,即表明这是一个正整数,上文说过正整数的反码和补码就是它本身,因此最终结果是 2

c语言中正数按位取反,js中怎么理解按位取反?相关推荐

  1. js base64 php,php中的base64decode 与js中的互相转换

    php中的base64decode 与js中的相互转换 function utf16to8(str) { var out, i, len, c; out = ""; len = s ...

  2. js去el的map_转:el表达式获取map对象的内容 js中使用el表达式 js 中使用jstl 实现 session.removeattribute...

    原文链接: 总结: el表达式获取map对象的内容 后端: HashMap map1 = new HashMap(); map1.put("key1","lzsb&quo ...

  3. php中的foreach和js中的foreach的用法和区别

    PHP中的foreach循环: 主要用于遍历数组 例如: (1)// $colors=array("red","yellow","blue" ...

  4. Vue中foreach数组与js中遍历数组的写法

    场景 Vue中使用Axios发送get或者post请求,发送请求时需要在js中 对请求参数进行遍历并处理. 接收响应时需要对响应结果进行遍历和处理. 注意区分在vue和js中foreach数组的区别. ...

  5. vue中引用js_从JS中的内存管理说起 —— JS中的弱引用

    点击上方"蓝字"关注本公众号 写在前面 在所有的编程语言中,我们声明一个变量时,需要系统为我们分配一块内存.当我们不再需要这个变量时,需要将内存进行回收(这个过程称之为垃圾回收). ...

  6. ie浏览器查看vue中js_浅析 Vue.js 中那些空间换时间的操作

    Hello,各位小伙伴,接下来的一段时间里,我会把我的课程<Vue.js 3.0 核心源码解析>中问题的答案陆续在我的公众号发布,由于课程的问题大多数都是开放性的问题,所以我的答案也不一定 ...

  7. JavaWeb中外部引入的js中涉及到location.href的页面跳转/jsp页面的外部js文件引入

    当js在jsp页面中写的时候没有任何问题如下所示: function deleteP(obj){if(confirm("你真舍得丢弃我吗?")){//发送请求location.hr ...

  8. ajax中的trim方法,js中trim函数实例参考

    在调用trim()的js方法上加入如下js代码: 复制代码 代码示例: string.prototype.trim = function(){ return this.replace(/(^/s*)| ...

  9. 在js中使用ejs标签,js中引用ejs变量

    在ejs模板页面的js代码中使用ejs标签实例 后端代码 router.get("/ejs", (req, res) => {req.title = "hello& ...

最新文章

  1. python rsa 公钥解密_python利用rsa库做公钥解密的方法教程
  2. codeforces D. Palindrome Degree(hash)
  3. 非此即彼的逻辑错误_MBA逻辑攻略逻辑知识大全,快来收藏吧!
  4. 如何在python官网下载pip_[Python]Pip的安装以及简单的使用
  5. coco训练集darknet_YOLOv4: Darknet 如何于 Docker 编译,及训练 COCO 子集
  6. zk 加载 html 标签,HTML字符实体——ZK支持字符
  7. 爬虫项目——xpath练手(1)
  8. swing简单的打字游戏源码
  9. linux查看cuda版本_查看Linux系统版本命令集合
  10. 如何生成白底一寸照?怎么制作白底证件照?
  11. python判断工作日,节假日
  12. 运放 - 输出阻抗(Open loop output resistance)Ro
  13. Word 2016 撰写论文(6): 取消/撤销 自动编号
  14. 数仓建模—ID Mapping(下)
  15. 惊!Adam效果不好居然是因为……,Decouple Weight Decay Regulaization阅读笔记
  16. SpringMVC(07) -- RESTful
  17. ligerui demo php,LigerUI的简单使用示例
  18. 基于天问block编译环境下ASRPRO语音芯片程序编写教程(二)语音识别,GPIO输入输出,PWM输出篇
  19. [音视频] wav 格式
  20. 怎么样手机里面的计算机发出音乐,周三手机课︱怎样把U盘、电脑、微信的音乐存在手机里?...

热门文章

  1. PDF如何合并为一个PDF?
  2. STM32CubeMX的正交编码器encoder
  3. SSL证书的工作原理是怎么样的?
  4. win 8.1 64位彻底删除王码98
  5. 【游戏】泡泡堂街机版(不需模拟器)
  6. touchgfx视频教程
  7. 进阶的阿牛哥之用python向多人发送邮件(带附件)、遍历邮件获取内容(两种方法:imbox、imaplib)
  8. 读书笔记(C++)————【重载操作符与转换】
  9. 台电x98plus的win10/win11使用
  10. 《期货及衍生品基础》第2章 期货市场组织结构与投资者