当前位置: 首页 > article >正文

取反运算符

在 C 语言中,取反运算符 “~” 是按位取反运算符。

一、计算原理

它对一个整数的每一位进行取反操作,即将 0 变为 1,将 1 变为 0。

例如,对于一个 8 位的整数:

假设初始值为 

5,其二进制表示为 

00000101。

对其进行取反操作后变为 

11111010。

如果这个数是有符号数,按照补码规则解释,这个值为 

-6。

补充:取反运算符得到的结果转为符号数,可以理解为,取反后的二进制转十进制的数 - 2^{m-1} - 2^{m-2} - ... - 2^{m-m}次方 -1,m为二进制位数,m不足4的倍数则向上补齐。

例如63的二进制为111111,将其位数补齐为4的倍数则为00111111,则~63 = 11000000 ,11000000转换为十进制为192,这里m=8,63去取反后的符号数为,192-128-64-32-16-8-4-2-1-1=-64

也可以理解为是63的负数减一(这样比较好理解)

二、应用场景和注意事项

  1. 位操作:常用于位操作场景,比如设置或清除某些特定的位。例如,要清除一个整数的最低位,可以使用 x = x & (~1),这里 ~1 的结果是一个除了最低位为 0 其余位为 1 的数,与 x 进行按位与操作就可以清除 x 的最低位。
  2. 优先级:取反运算符的优先级较高,在复杂表达式中要注意使用括号来明确运算顺序,以避免出现意外的结果。
  3. 数据类型:对不同数据类型进行取反操作时,要考虑数据类型的位数和表示范围。例如,对一个短整型(short)和一个长整型(long)进行取反操作,结果的位数和取值范围是不同的。
  4. 有符号数和无符号数:对于有符号数和无符号数的取反结果可能会有很大差异,因为有符号数使用补码表示,而无符号数直接按位取反解释。例如,对 -1(有符号数,二进制补码表示为全 1)进行取反和对无符号数 4294967295(十六进制为 0xFFFFFFFF,二进制也是全 1)进行取反,结果虽然在二进制表示上相同,但解释却不同,前者取反后变为 0,后者取反后变为 0(无符号数解释)。

http://www.kler.cn/a/298005.html

相关文章:

  • 让图片变成动画,@keyframes:动画制作
  • 二进制方式安装Helm
  • 【Arcgis基础教程】GIS数据制备,空间分析与高级建模实践应用
  • 大模型微调使GPT3成为了可以聊天发布指令的ChatGPT
  • Linux工程管理文件Makefile传递变量-进阶篇
  • 油耳朵耳屎怎么清理?可视耳勺使用方法
  • 分支管理
  • Accelerated Soft Error Testing 介绍
  • 目标检测-小目标检测方法
  • ubuntu 安装配置 ollama ,添加open-webui
  • 【软件工程】CI_CD
  • 【STM32】CAN总线基础入门
  • Linux网络协议栈的实现
  • Unity3D GPUDriven渲染详解
  • 输出CAD图中第一个图元类型——c#实现
  • 走进低代码报表开发(一):探秘报表数据源
  • Servlet-学习笔记-下
  • 类加载器 超详解:什么是类加载器,类加载器作用及应用场景,类加载时机,类加载的完整过程,类加载器分类
  • NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001
  • SQL基础语句