(按位取反)运算的理解:

按照我平时的理解,当我使用按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是按位取反的运算结果(这点没问题)

例如,假如我的计算机是32位的,我接下来要计算~5的值,计算过程如下:

5 的二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101

执行运算,即5后: 1111 1111 1111 1111 1111 1111 1111 1010,即结果为-6

以上过程没有任何问题,但我们如果忘记了负数的二进制表达方式,那么就会对这个结果产生疑问,为什么1111 1111 1111 1111 1111 1111 1111 1010表示-6,可能我们会以为它应该表示-10等等,所以,理解~按位取反的另一个关键就是理解1111 1111 1111 1111 1111 1111 1111 1010为什么表示-6,也即理解负数的二进制表达方式。

现在计算机普遍使用补码表示负数。知道一个数的补码,要求其值的方法是:首先看符号位也就是最左的一位,如果是1代表是负数(-)如果是0代码是正数(+),然后对该值取反再+1,得到其源码。

例如本例中得到的 1111 1111 1111 1111 1111 1111 1111 1010,其符号位(最左一位)是1,表明它表示的是负数,欲求其源码,需先对其取反,然后再加1:0000 0000 0000 0000 0000 0000 0000 0101 + 1 = 0000 0000 0000 0000 0000 0000 0000 0110,然后在得到的源码前加一个负号,即-0000 0000 0000 0000 0000 0000 0000 0110 = -6。以上便是对按位取反运算以及负数的二进制表示的理解,不难发现,在求源码的时候,要将补码进行取反后再加1,然而这个补码原本就是之前由运算时,对原来的操作数通过~按位取反而得来的,所以,此时在求该补码的源码时的取反操作,相当于将补码变回了原来的那个操作数,之后进行的加1操作就相当于对原来的操作数进行加1,只不过结果变成了他的相反数。

因此,可以总结出按位取反的计算结论是:n = -(n+1)

例如本例中,~5 = -(5+1),即~5 = -6

& 与 都是1为1

| 或 有1就为1
取反 1变0 0变1 ~227 = -228

^ 异或 相同为0 不同为1

<< 左移 左移补0

右移 右移补符号位`

#include <stdio.h>int main()
{// &   与       都是1为1// |   或       有1就为1// ~   取反      1变0 0变1//   ^   异或      相同为0 不同为1// <<    左移      左移补0//  >>    右移      右移补符号位int a = 1;int b = 2;a = a ^ b;b = a ^ b;a = a ^ b;return 0;
}

逻辑运算(按位取反)相关推荐

  1. STC51-C51基础知识

    1 单片机定义与结构 1.1 什么是单片机  单板机:将CPU芯片.存储器芯片.I/O接口芯片和简单的I/O设备(小键盘.LED显示器)等装配在一块印刷电路板上,再配上监控程序(固化在ROM中),就构 ...

  2. Java基础数据类型与运算符

    安装环境: 1.jdk 2.idea JDK:java开发工具 JRE:Java运行环境 JVM:Java虚拟机 在一个Java文件中,如果存在public class 这样的类,那么类名一定要和文件 ...

  3. Java—数据类型与运算符

    目录 一,写在前面 二,变量和类型 1,整型变量 2,长整型变量 3,双精度浮点型变量 4,单精度浮点型变量 5,字符类型变量 6,字节类型变量 7,短整型变量 8,布尔类型变量 9,字符串类型变量 ...

  4. 初识Java 超详细的万字入门介绍

    目录 -------------初识Java --------数据类型与变量 1. 字面常量 2. 数据类型 3. 变量 3.1.整型变量 3.2.长整型变量 3.3. 短整型变量 3.4. 字节型变 ...

  5. c语言逻辑运算类指令,组成原理第二章——计算机指令

    计算机指令 算术运算指令 add a, b, c# a = b + c 设计原则一--对指令进行规整化设置 简化实现 获得更高的性能,更低的成本 代码示例 C语言代码 f = (g + h) - (i ...

  6. Hive常用运算(关系运算)、逻辑运算与数学运算、数值运算、日期函数、条件函数、字符串函数

    hive 常用运算 第一部分:关系运算 Hive支持的关系运算符 •常见的关系运算符 •等值比较: = •不等值比较: <> •小于比较: < •小于等于比较: <= •大于比 ...

  7. 程序员数学基础【一、基础运算符号(整数、普通浮点数运算、逻辑运算)】(Python版本)

    测试使用语言:[Python] 由于此类语言入门非常容易,哪怕初中生亦可以,并且本科/研究生写论文.做实验多数所用语言都是[Python]故而选择此语言. 代码运行平台:[win10 x64] 代码环 ...

  8. Pandas知识点-逻辑运算

    Pandas知识点-逻辑运算 逻辑运算在代码中基本是必不可少的,Pandas的逻辑运算与Python基础语法中的逻辑运算存在一些差异,所以本文介绍Pandas中的逻辑运算符和逻辑运算. 本文使用的数据 ...

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

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

最新文章

  1. 单例模式中,你不知道的事~~
  2. ROS系统 动作编程
  3. boost::lexical_cast用法的测试程序
  4. java mysql数据去重_java使用MySQL和HQL数据去重
  5. ppp在linux下的编译和安装
  6. 微型计算机中的80586指,一级B考试模拟试题-套,DOS版本:6.0
  7. erlang在mac上安装
  8. 最简单的使用nginx实现动静分离
  9. SATA硬盘在安装OS时注意AHCI模式
  10. 应届生面试这样准备,最能展现自己优势!
  11. 太厉害了,阿里大牛把Java服务端做成一张超全的知识微缩地图
  12. 解析新时代人工智能机器人的工作原理
  13. 三种设置session有效时间的方法
  14. SPSS 探索性因素分析(图文+数据集)【SPSS 033期】
  15. MSDN不能使用,提示“无法打开文档资源管理器”
  16. 1447_TC275 DataSheet阅读笔记8_电气特性
  17. 开启tomcat服务后,如何解决浏览器访问不到tomcat中图片或文件的问题,以及如何设置访问图片路径
  18. 小票打印ESC/POS命令集
  19. mysql 查找具体sql执行性能
  20. linux rsync 原理,rsync压缩及其工作原理

热门文章

  1. 为什么引入非线性激励函数?
  2. Android 带你彻底理解 Window 和 WindowManager
  3. 【算法】倒水游戏(BFS|C++)
  4. 深入理解图卷积神经网络(GCN)原理
  5. Linux4.19-获取IDT地址
  6. git使用meld的方法
  7. iOS NSDate与NSTimeInterval之间的互转
  8. 开发高性能的Socket服务器
  9. python如何创建一个新的文件夹
  10. 大型建筑公司如何实现数字化转型