C语言的按位取反符号~(详解)

我看了很多博主对于按位取反的讲法是有些错误的,或者也有可能是我理解错了哈哈,但是我的方法用在任何数字上结果都是正确的,大伙不妨先听听看

首先要知道两点(弄懂这两点其实就简单了)

1.按位取反只能对补码来取反,意思是把一个原值先化成补码了再取反,并且最高位(符号位)也要取反,即正数按位取反后变为负数,负数按位取反后变为正数(由于0的补码始终都为0,所以0按位取反后为-1)

2.取反后的值也以补码的形式存在,那么正数的补码即是它本身,负数补码化为原码是需要计算一下的

一、a=15

那么a的原码是0000 1111,正数的补码就是原码本身,所以a的补码也是0000 1111

取反后为为1111 0000,此时的数为~a的补码,且~a为负数

已知一个负数补码,那么原码为补码符号位不变,数值位按位取反后加1

符号位不变数值位按位取反为:10001111;加1后为:10010000

即~a=-16

二、a=-15

那么a的原码为1000 1111,a的反码为原码符号位不变,数值位取反即1111 0000,

补码为反码+1即1111 0001;对补码按位取反后为0000 1110(符号位也要取反),此时按位取反

依然是补码,但是正数的补码等于原码

即~a=14

  • 17
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值