前言

在上一篇文章中,我们介绍了^运算符的高级用法,本篇文章,我们将介绍~ 运算符的一些高级用法。

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

  • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、相反数

  • 我们可以利用负数的补码性质,来获得一个正数的相反数
#include <stdio.h>
int main() 
{
    int a = 18;
    printf("相反数为%d\n", ~a + 1 );
    return 0;
}
  • 运行结果

三、替换加法

  • 利用相反数的规则,我们可以替换掉加法运算中的加号
  • a + b = a-(-b) = a - (~b+1)
  • 最终得到a + b = a - ~b - 1
#include <stdio.h>
int main() 
{
    int a = 23;
    int b = 7; 
    printf("a + b = %d\n", a - ~b - 1 );
    return 0;
}
  • 运行结果

四、替换减法

  • 同样的减法也可以利用相反数的规则
  • a - b = a +(~b+1) = a + ~b + 1
#include <stdio.h>
int main() 
{
    int a = 23;
    int b = 7; 
    printf("a - b = %d\n", a + ~b + 1 );
    return 0;
}
  • 运行结果

小结

通过这篇文章,我们学会了用位运算符~的3种高级用法

1、求一个整数的相反数

2、用~替代加法运算

3、用~替代减法运算

在下一篇文章中,我们将介绍位运算符<<的一些高级用法。

作者:|知微之见|,原文链接: https://www.cnblogs.com/Wayne123/p/17316878.html

文章推荐

聊一聊redis十种数据类型及底层原理

Java设计模式-建造者模式

java获取到heapdump文件后,如何快速分析?

Linux:管道命令与文本处理三剑客(grep、sed、awk)

Redis - 底层数据结构

程序化广告还有未来么?(4/5)——程序化领域变化的底层逻辑...

MySQL的binlog日志

day11-SpringBoot中注入Servlet&Filter&Listener

SpringBoot项目jar、war包启动解析

非侵入式入侵 —— Web缓存污染与请求走私

自己动手写线程池——向JDK线程池进发

《Unix 网络编程》05:TCP C/S 程序示例