逻辑运算(按位取反)
(按位取反)运算的理解:
按照我平时的理解,当我使用按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是按位取反的运算结果(这点没问题)
例如,假如我的计算机是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;
}
逻辑运算(按位取反)相关推荐
- STC51-C51基础知识
1 单片机定义与结构 1.1 什么是单片机 单板机:将CPU芯片.存储器芯片.I/O接口芯片和简单的I/O设备(小键盘.LED显示器)等装配在一块印刷电路板上,再配上监控程序(固化在ROM中),就构 ...
- Java基础数据类型与运算符
安装环境: 1.jdk 2.idea JDK:java开发工具 JRE:Java运行环境 JVM:Java虚拟机 在一个Java文件中,如果存在public class 这样的类,那么类名一定要和文件 ...
- Java—数据类型与运算符
目录 一,写在前面 二,变量和类型 1,整型变量 2,长整型变量 3,双精度浮点型变量 4,单精度浮点型变量 5,字符类型变量 6,字节类型变量 7,短整型变量 8,布尔类型变量 9,字符串类型变量 ...
- 初识Java 超详细的万字入门介绍
目录 -------------初识Java --------数据类型与变量 1. 字面常量 2. 数据类型 3. 变量 3.1.整型变量 3.2.长整型变量 3.3. 短整型变量 3.4. 字节型变 ...
- c语言逻辑运算类指令,组成原理第二章——计算机指令
计算机指令 算术运算指令 add a, b, c# a = b + c 设计原则一--对指令进行规整化设置 简化实现 获得更高的性能,更低的成本 代码示例 C语言代码 f = (g + h) - (i ...
- Hive常用运算(关系运算)、逻辑运算与数学运算、数值运算、日期函数、条件函数、字符串函数
hive 常用运算 第一部分:关系运算 Hive支持的关系运算符 •常见的关系运算符 •等值比较: = •不等值比较: <> •小于比较: < •小于等于比较: <= •大于比 ...
- 程序员数学基础【一、基础运算符号(整数、普通浮点数运算、逻辑运算)】(Python版本)
测试使用语言:[Python] 由于此类语言入门非常容易,哪怕初中生亦可以,并且本科/研究生写论文.做实验多数所用语言都是[Python]故而选择此语言. 代码运行平台:[win10 x64] 代码环 ...
- Pandas知识点-逻辑运算
Pandas知识点-逻辑运算 逻辑运算在代码中基本是必不可少的,Pandas的逻辑运算与Python基础语法中的逻辑运算存在一些差异,所以本文介绍Pandas中的逻辑运算符和逻辑运算. 本文使用的数据 ...
- [GO语言基础] 四.算术运算、逻辑运算、赋值运算、位运算及编程练习
作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Golang的 ...
最新文章
- 单例模式中,你不知道的事~~
- ROS系统 动作编程
- boost::lexical_cast用法的测试程序
- java mysql数据去重_java使用MySQL和HQL数据去重
- ppp在linux下的编译和安装
- 微型计算机中的80586指,一级B考试模拟试题-套,DOS版本:6.0
- erlang在mac上安装
- 最简单的使用nginx实现动静分离
- SATA硬盘在安装OS时注意AHCI模式
- 应届生面试这样准备,最能展现自己优势!
- 太厉害了,阿里大牛把Java服务端做成一张超全的知识微缩地图
- 解析新时代人工智能机器人的工作原理
- 三种设置session有效时间的方法
- SPSS 探索性因素分析(图文+数据集)【SPSS 033期】
- MSDN不能使用,提示“无法打开文档资源管理器”
- 1447_TC275 DataSheet阅读笔记8_电气特性
- 开启tomcat服务后,如何解决浏览器访问不到tomcat中图片或文件的问题,以及如何设置访问图片路径
- 小票打印ESC/POS命令集
- mysql 查找具体sql执行性能
- linux rsync 原理,rsync压缩及其工作原理