C语言中,取反运算符~a=-(a+1)的原因
1、因为计算机直接拿读取到的数据去运算付出的代价是最小的,
所以计算机存储的数据的形式应该满足读取后不必经过任何加工就能直接用来运算
由于原码不经加工无法实现(+a)+(-a)=0,所以不满足该要求,
为了满足(+a)+(-a)=0的要求,人们设计出了补码来满足该要求
因而计算机中存储数据的形式为原码的补码
知道这一点就容易解释为什么~a=-(a+1)了
首先,~的作用是将计算机存储的二进制数所有位取反
(注意是存储的二进制数,而不是输出的二进制数)
其次,计算机存储的二进制数是原码的补码,
输出前要做一次补码到原码的转化过程,
(注意正数:3码合一;负数:要先数值位减一,再符号位不变,数值位取反
或者先数值位不变,数值位取反,再数值位加一)
综上,
1、由于所有位都取反时符号位取反了,所以a~a与符号位一定相反
2、由于所有位都取反时数值位取反一次,补码转化成原码输出时又取反一次,所以抵消了,这样数值位的不变,在此基础上数值位再加一,输出~a的绝对值就比原来的输入a的绝对值大一了。
感谢这位大佬的详解:取反运算符~详解 - 知乎 (zhihu.com) 及其他未提及的贡献者!
C语言中,取反运算符~a=-(a+1)的原因的更多相关文章
- Java:Java的~取反运算符详解
例: ~15 先变成二进制:15:0000 1111 这个其实挺简单的,就是把1变0,0变1 注意:二进制中,最高位是符号位 1表示负数,0表示正数
- 【转】C语言位运算符:与、或、异或、取反、左移与右移详细介绍
转载自:http://www.jb51.net/article/40559.htm,感谢原作者. 以下是对C语言中的位运算符:与.或.异或.取反.左移与右移进行了详细的分析介绍,需要的朋友可以过来参考 ...
- C语言位运算符:与、或、异或、取反,左移和右移
C语言位运算符:与.或.异或.取反.左移和右移 个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. ,则该位的结果值为1,否则为0 | ...
- C语言位运算符:与、或、异或、取反、左移和右移
语言位运算符:与.或.异或.取反.左移和右移 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符 ...
- Java_按位与&,按位或,取反,左移,右移运算符
//按位与运算& System.out.println(0&0);//0 System.out.println(0&1);//0 System.out.println(1&am ...
- C语言位运算符:与、或、异或、取反、左移与右移详细介绍
位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...
- 异或运算符(^)、与运算符(&)、或运算符(|)、反运算符(~)、右移运算符(>>)、无符号右移运算符(>>>)
目录 异或(^).异或和 的性质及应用总结 异或的含义 异或的性质:满足交换律和结合律 异或的应用 按位 与运算符(&) 按位 或运算符(|) 取 反运算符(~) 右移运算符(>> ...
- numpy取反操作符和Boolean类型
numpy~运算符和Boolean类型变量 觉得有用的话,欢迎一起讨论相互学习~Follow Me numpy中取反运算符~可以将Boolean类型值取反,这在使用boolean类型数组选择数组中固定 ...
- PHP中关于位运算符 与 或 异或 取反
<?php /** * author:LMS * createTime:2015/07/22 * desctiption:位运算[ & | ^ ~ ] * 与&:如果a.b两个值 ...
- C语言位运算符及作用:与、或、异或、取反、左移和右移
一.& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0应用:(1)清零 若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:原来的数 ...
随机推荐
- C语言II—作业03
1.作业头 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-3 这个作业要求在哪里 https://edu.cnblogs.com/cam ...
- Unity学习笔记——坐标转换(3)
通过Transform.Translate移动物体 6个重载: public void Translate(float x, float y, float z, [De ...
- centos7中Firefox安装Flash插件
第一步:先下载好Flash插件安装包,可以到Adobe官网下载.因为是linux 64位系统,所以要下个匹配的,我下载的是flash_player_npapi_linux.x86_64.tar.gz, ...
- ARMV8 short notes
offset addressing pre-index addressing define like: load the compass content of the operand 2 to ope ...
- 使用IDEA的webservice工具解析生成的客户端调用远程接口
由于这个接口的报文格式比较麻烦,是XML的请求头加上JSON格式的请求体,所以看起来比较复杂,也可以用RPC的方式调用,那样需要将请求头和请求体,响应头和响应体建实体.public JSONObjec ...
- python pip安装三方库失败
Collecting pip WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None ...
- weblogic session timed out
How to Configure Session Timeout in Weblogic Server (WLS) ?
- 借助5G智能网关实现无人化智慧农业应用
发展智慧农业是新时代的必由之路.依托5G+物联网技术赋能农业生产,能够实现更少的人员需求,更大面积的综合土地管理,更实时精细的生产环境监测,更智能的生产自主管控.5G技术正以其广连接.低时延的优势,助 ...
- C#软件增加混淆防止反编译
使用Visual Studio新建一个名为"test"的命令行项目输入如图所示的代码并生成项目,这个项目很简单,就是程序启动时,调用"GetGUID"函数返回一 ...
- Pytorch基础复习
项目推进中期,重新到头来学Pytorch.five落泪了.(╬▔皿▔)凸 笑死,憋不住了,边更边学. 整篇博客整体采用总分总形式.首先将介绍内容(加黑部分)之间关系进行概括,后拆解,最后以图总结. 全 ...