关于~操作符的理解

首先定义一个整数假如是5,将他转换为二进制类型的话就是101,前面是29个0,这个就是它的原码,然后反码就是将它的第一个二进制位即符号位不变,之后的31个数位的值由1变0,由0变1得到它的反码,反码加1变成补码,也就是0111111111111111111111111111101这个数加1得到011111111111111111111111111110,也就是它的补码,补码再减1后得到反码,反码由1变0,由0变1之后就是原码,最终输出的结构果都是以原码的形式输出。

而'~'这个操作运算符的作用就是将一个整数的二进制补码按位取反,将1变为0,将0变为1,然后得到新的补码,再由这个补码转换为原码就是新的数字,输出的是原码,就是这个新数字。

如;0的原码是00000000000000000000000000000000,其补码和原码一致,所以0的补码也是00000000000000000000000000000000,然后我们对它使用操作运算符~之后,将其补码按位取反,也就是11111111111111111111111111111111,这个就是0的补码的~之后的结果,然后将这个结果减1,然后除了符号位之外的数按位取反得到100000000000000000000000000000001,最终的结果就是-1.

源代码;

#include <stdio.h>
int main()
{
    int a = 0;
    printf("%d\n", ~a);
}

结果是-1.

例题2:11的二进制数位为00000000000000000000000000001011,假如让我们给倒数第三个为0的那个数换为1,该怎么换?

源代码:

#include <stdio.h>

int main()

{

a=11;

a=a|(1<<2);

}

这样得到的结果就是00000000000000000000000000001111,假如我们又想让倒数第三个数变为0了该怎么办?

源代码:

#include <stdio.h>

int main()

{

int a=15;

a=a&(~(1<<2));

}

先把1的二进制数位向左移两位,也就是00000000000000000000000000000100,然后在按位取反~,就是11111111111111111111111111111011,再把这个值和00000000000000000000000000001111按位与一下,同1值取1,不同取0,这样就把0和1相对的值都取为了0,得到结果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值