c语言中正数按位取反,js中怎么理解按位取反?
第一位同学写的挺好的,但一开始我没太明白为什么这样计算?,以下是学习做的笔记。
首先我们先要明白有符号整数,有符号整数的最高位表示的是符号位,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中怎么理解按位取反?相关推荐
- js base64 php,php中的base64decode 与js中的互相转换
php中的base64decode 与js中的相互转换 function utf16to8(str) { var out, i, len, c; out = ""; len = s ...
- js去el的map_转:el表达式获取map对象的内容 js中使用el表达式 js 中使用jstl 实现 session.removeattribute...
原文链接: 总结: el表达式获取map对象的内容 后端: HashMap map1 = new HashMap(); map1.put("key1","lzsb&quo ...
- php中的foreach和js中的foreach的用法和区别
PHP中的foreach循环: 主要用于遍历数组 例如: (1)// $colors=array("red","yellow","blue" ...
- Vue中foreach数组与js中遍历数组的写法
场景 Vue中使用Axios发送get或者post请求,发送请求时需要在js中 对请求参数进行遍历并处理. 接收响应时需要对响应结果进行遍历和处理. 注意区分在vue和js中foreach数组的区别. ...
- vue中引用js_从JS中的内存管理说起 —— JS中的弱引用
点击上方"蓝字"关注本公众号 写在前面 在所有的编程语言中,我们声明一个变量时,需要系统为我们分配一块内存.当我们不再需要这个变量时,需要将内存进行回收(这个过程称之为垃圾回收). ...
- ie浏览器查看vue中js_浅析 Vue.js 中那些空间换时间的操作
Hello,各位小伙伴,接下来的一段时间里,我会把我的课程<Vue.js 3.0 核心源码解析>中问题的答案陆续在我的公众号发布,由于课程的问题大多数都是开放性的问题,所以我的答案也不一定 ...
- JavaWeb中外部引入的js中涉及到location.href的页面跳转/jsp页面的外部js文件引入
当js在jsp页面中写的时候没有任何问题如下所示: function deleteP(obj){if(confirm("你真舍得丢弃我吗?")){//发送请求location.hr ...
- ajax中的trim方法,js中trim函数实例参考
在调用trim()的js方法上加入如下js代码: 复制代码 代码示例: string.prototype.trim = function(){ return this.replace(/(^/s*)| ...
- 在js中使用ejs标签,js中引用ejs变量
在ejs模板页面的js代码中使用ejs标签实例 后端代码 router.get("/ejs", (req, res) => {req.title = "hello& ...
最新文章
- python rsa 公钥解密_python利用rsa库做公钥解密的方法教程
- codeforces D. Palindrome Degree(hash)
- 非此即彼的逻辑错误_MBA逻辑攻略逻辑知识大全,快来收藏吧!
- 如何在python官网下载pip_[Python]Pip的安装以及简单的使用
- coco训练集darknet_YOLOv4: Darknet 如何于 Docker 编译,及训练 COCO 子集
- zk 加载 html 标签,HTML字符实体——ZK支持字符
- 爬虫项目——xpath练手(1)
- swing简单的打字游戏源码
- linux查看cuda版本_查看Linux系统版本命令集合
- 如何生成白底一寸照?怎么制作白底证件照?
- python判断工作日,节假日
- 运放 - 输出阻抗(Open loop output resistance)Ro
- Word 2016 撰写论文(6): 取消/撤销 自动编号
- 数仓建模—ID Mapping(下)
- 惊!Adam效果不好居然是因为……,Decouple Weight Decay Regulaization阅读笔记
- SpringMVC(07) -- RESTful
- ligerui demo php,LigerUI的简单使用示例
- 基于天问block编译环境下ASRPRO语音芯片程序编写教程(二)语音识别,GPIO输入输出,PWM输出篇
- [音视频] wav 格式
- 怎么样手机里面的计算机发出音乐,周三手机课︱怎样把U盘、电脑、微信的音乐存在手机里?...