按位取反

    • 1.理解按位取反的前提
      • 符号位
      • 原码反码补码的相互转化
        • 正数的相互转化
        • 负数的相互转化
    • 2.按位取反的具体逻辑
        • (1)得到该数的补码
        • (2)对补码取反,得到新的补码
        • (3) 对新补码反向求原码
      • 举例
    • 一些简便按位取反的简便计算
  • 请给本菜鸟一个点赞和收藏吧

1.理解按位取反的前提

符号位

二进制最前端的1代表负数,0代表正数,符号位一般会占据最前端
比如1字节数的0可以表示为

[0000 0000]

1个字节最大存储数为

[0111 1111] 或 [1111 1111]
分别是2的8次方-1,即 255 和 -255
符号位占据了一个比特位

原码反码补码的相互转化

正数的相互转化

 原码:符号位为0,其后将十进制转化为二进制,得到的就是其原码反码:与原码相同补码:与原码相同

负数的相互转化

   原码:符号位为1,其后将十进制转化为二进制,得到的就是其原码反码:符号位不变,其余都进行取反,原先为1的变为0,原先为0的变为1补码:反码+1

举例

正数  1 --- [0000 0001]原 --- [0000 0001]反 --- [0000 0001]补
负数 -1 --- [1000 0001]原 --- [1111 1110]反 --- [1111 1111]补

2.按位取反的具体逻辑

得到新补码后要注意符号位是什么,如果为1则继续推演,如果为0,则得到的新补码就是新原码
步骤

(1)得到该数的补码

(2)对补码取反,得到新的补码

(3) 对新补码反向求原码

对于得到新补码逆向求出新原码的过程

 如果把负数原码到补码的过程当作通用的流程那么原码到反码,先要保留符号位,然后再对原码取反最后反码加1得到补码那么逆向过程 补码 -> 反码-> 原码 则为补码减一得到反码反码再保留符号位得到原码

举例

0的按位取反
1.得到补码[0000 0000]原码由于正数的原码反码补码相同,则[0000 0000]为补码
2.对补码取反,得到新的补码[0000 0000]  原先的补码[1111 1111]新补码3.逆向求原码补码减一得到反码[1111 1110]新反码反码取反得到原码则符号不变,其余取反[1000 0001] 新原码

根据计算器可看出来推演正确

-2的按位取反
1.得到原码[1000 0010] 原码得到反码时符号位不变,其余取反[1111 1101]  反码反码加1得补码[1111 1110] 补码
2.对补码取反,得到新的原码[1111 1110] 原先的补码取反[0000 0001] 新补码由于新补码符号位为0,则其新原码与其新补码相同[0000 0001] 新原码

根据计算器可知演算过程正确

一些简便按位取反的简便计算

取反的符号为’ ~ ’
1.一个数取反再取反便是他本身,例如 ~ ( ~ 100 ) = 100
2.负数的取反可由公式直接推得
公式 ~x=-(x+1)
例如~ (-100) = - (-100 + 1) = 99
也可以理解为负数的取反就是 负数的绝对值减1
即 ~ (100)= |-100| - 1 = 99

请给本菜鸟一个点赞和收藏吧

c语言基础难关:按位取反相关推荐

  1. java语言中声明布尔型_【Java初探02】——Java语言基础

    本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...

  2. c语言枚举变量自增报错,C_数据结构与算法(1):C语言基础

    C_数据结构与算法(一):C语言基础 致初学者的我:一切都是由浅入深. 每种语言都有每种语言的特性,基本的特性是相同的,下面依照惯例写hello world,相关编译后面再介绍. // C语言用&qu ...

  3. c语言位运算负数的实例_负数位运算的右移操作-C语言基础

    这一篇探讨的是"负数位运算的右移操作",涉及到数据的源码.反码.补码的转换操作.属于C语言基础篇. 先看例子 #include int main(void) { //正数的位右移 ...

  4. c语言中shift f12组合建,C++学习1-(C语言基础、VS快捷键)

    C语言基础复习 1.三码 正数: 3码合1 ,正数的反码/补码就是其本身 负数: 原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值 原码:11010101 负数的反码是在其原码的基础上 ...

  5. 我的全栈之路-C语言基础之数据存储

    我的全栈之路-C语言基础之数据存储 我的全栈之路 2.1 计算机的计算单位 2.1.1 容量单位 2.1.2 速度单位 2.2 计算机底层为什么只能识别二进制 2.3 进制 2.3.1 进制概述 2. ...

  6. 【五】 C语言基础知识学习回顾 | 一篇搞定C语言基础 | 内附详细代码以及注释

    一 .C语言学习第一天 1.1 编写C语言代码:hello.c #include<stdio.h> #include<stdlib.h> //调用system系统函数需要包含的 ...

  7. [GO语言基础] 四.算术运算、逻辑运算、赋值运算、位运算及编程练习

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Golang的 ...

  8. C语言基础1:初识C语言(转义、注释;数组、操作符、反码、补码、static、define、指针、结构体常变量;局部变量;作用域、生命周期)

    文章目录 C语言基础1:初识C语言 1.C语言简介 1.1什么是C语言 1.2C语言的发展 2.第一个C语言程序 2.1创建项目 2.2添加源文件 2.3写代码 3.数据类型 4.变量.常量 4.1定 ...

  9. (C/C++)数据结构所需的程序语言基础(一)数据类型、运算符及表达式

    语言基础之数据类型.运算符及表达式 (一)数据及数据的表现形式 1. 数据 是描述客观事物的符号,是计算机可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合,数据不仅仅指我们通常所说的数值 ...

最新文章

  1. Hibernate基本原理(一)
  2. 又一个智商税产品“路由器防辐射笼”,信号都没了,还能火爆全网...
  3. Redis流量控制策略
  4. 求有向图中两点最短距离java_Java 迪杰斯特拉算法实现查找最短距离
  5. Day2-运算符和编码
  6. Liberty glance 新功能 healthcheck
  7. 【Git/Github学习笔记】Git常用命令(版本回退)
  8. OFFICE技术讲座:段落五种对齐方式的说明
  9. cors nginx 怎么解决_如何在Nginx代理服务器中启用CORS?
  10. 母版页与用户控件区别(思维导图整理)
  11. JSON WEB TOKEN令牌快速入门学习 (jwt)
  12. VMware破解虚拟机内存cpu最大限制
  13. PHP在线运行,在线编译
  14. 复旦提出M2TR:首个多模态多尺度Transformer
  15. Final Cut Pro 学习笔记
  16. 关于python中的字符串映射转换
  17. 实现Android跨进程组件通信能有多简单?
  18. linux kill进程 名字,linux kill 掉所有匹配到名字的进程
  19. 蒙哥马利(Montgomery)算法简介
  20. MySQL:一个简单insert语句的大概流程

热门文章

  1. H264学习(二)编码方法和编码工具简介
  2. [附源码]JSP+ssm计算机毕业设计小区物业报修管理系统e2ps6【源码、数据库、LW、部署】
  3. socks5 代理服务器项目
  4. MessageSolution企业邮件归档管理系统EEA信息泄露漏洞(cnvd-2021-10543)
  5. (键盘,鼠标)按键消息大全.......
  6. Java接收solr动态域_Spring Data Solr创建动态域报错:org.springframework.data.solr.UncategorizedSolrException...
  7. Oppo手机自带翻译功能你知道吗?一键实时语音翻译,看完学到了
  8. 2010世界杯,我的Android之旅
  9. Delphi编程控制摄像头
  10. 解决QQ2009不能发临时会话信息