栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言的按位取反运算符

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言的按位取反运算符

按位取反运算符 ~:  一元运算符,对应的二进制位,0变为1,1变为0。

分析:

由于负数的原码,补码,反码不同

因此将要进行计算:

补码—>反码—>原码

原码—>反码—>补码

原码二进制位全部将将1变为0,0变为1,得到反码

反码+1得到补码(反码加的1位最右位的1)

例如:

正数:

Int a=15

设a=15为a1

此时a1的原码为:0……0,0……0,0……0,00001111

因为a1为正数(正数的补码,反码,原码相同),因此进行取反运算:

设~a为a2,

因此得:a2的原码为:1……1,1……1,1……1,11110000

所以a2的反码为:1……0,0……0,0……0,00001111

补码=反码+1:所以a2的补码:1……0,0……0,0……0,00010000(二进制逢二进一)

所以a2=-16

负数:

在使用~计算负数时,由于在计算机中,负数的补码,反码,原码不同,因此首先将操作数的值计算为补码,再进行取反运算;

Int a=-15;(a=-15为原码);(在计算机中负数以补码的形式存在)

此时,首先进行从原码到补码的计算:

原码为-151:……1,1……1,1……1,00001111

反码:1……1,1……1,1……1,11110000(将原码换算为反码:将原码的值取相反数,1变0,0变1)

补码:补码=反码+1:1……1,1……1,1……1,11110001

此时进行取反运算(包括符号位也要变):0……0,0……0,0……0,00001110:14

所以

~a=14;

取反运算符公式:

n=-(n+1)

时刻牢记计算机中二进制以补码的形式存在

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352542.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号