C语言运算符:1.按位取反运算符 " ~ "

举个例子:
#include <stdio.h>
int main()
{
int a=7;
int b=~a;
print ("%d/n",b)
return 0;
}
打印的结果是多少呢,嘿嘿留个悬念。
结果是-8。这是 为什么呢?
第一步:整数型变量a的二进制表示原码为00000111。内存中的补码为00000111
第二步:对内存中的内容进行按位取反,得到的内存中的补码为: 11111000(左数第一位为符号位,正数取反后为负数),补码为负数。
第三步:这是重点,当内存中的补码转为原码后:正数的补码转为原码不变,负数的补码转为原码是对补码(除符号位)逐位取反后,并在最低位+1。
第四步:运算
10000111(不明白开第三步)
+1就等于10001000
结果为:-8

趁热打铁 :
#include <stdio.h>
int main()
{
int a=-7;
int b=~a;
print ("%d/n",b)
return 0;
}
这个值是多少呢?
结果为:6
第一步:整数型变量a的二进制表示原码为10000111。内存中的补码为11111001
第二步:对内存中的内容进行按位取反,得到的内存中的补码为:00000110(左数第一位为符号位,负数取反后为正数),补码为正数。
第三步:这是重点,当内存中的补码转为原码后正数的补码转为原码不变,负数的补码转为原码是对补码(除符号位)逐位取反后,并在最低位+1。
第四步:运算
00000110(不明白开第三步)
结果为:6

概念总结:
原码为正数,内存中的补码也为正数,按位取反后内存中的补码变为负数,当内存中的补码转化成原码时,原码等于=补码除符号位外逐位取反,并在最低位+1。
原码为负数,内存中的补码为原码的除符号位外逐位取反,并在最低位+1,按位取反后内存中的补码变为正数,当内存中的补码转化成原码时,原码=补码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值