~:含义及用法举例

文章目录

  • 前言
  • 一、“~”是什么?
  • 二、原码、反码及补码
    • 1.简介
    • 2.用法举例
      • ①正整数
      • ②负整数
      • ③零
  • 三、“~”操作符

    • 1.简介
    • 2.用法举例
      • ①正整数
      • ②负整数
      • ③零

前言

本文在简单介绍原码反码补码的基础上,介绍“~”操作符的用法。


一、“~”是什么?

~:一种单目操作符,即对一个数的二进制按位取反。

二、原码、反码及补码

1.简介

一个整数的二进制表示有3种:原码、反码及补码。

最高位为符号位,0为正,1为负。

整数在内存中存储的是补码。

2.用法举例

①正整数

原码、反码、补码相同。

例如

1:

00000000 00000000 00000000 00000001(原码)

00000000 00000000 00000000 00000001(反码)

00000000 00000000 00000000 00000001(补码)

②负整数

原码 --------------------------------------------> 反码 --------------------------------------------> 补码

(符号位不变,其他位按位取反)                            (加一)

原码 <-------------------------------------------- 反码 <-------------------------------------------- 补码

(符号位不变,其他位按位取反)                            (减一)

例如

-1:

10000000 00000000 00000000 00000001(原码)

11111111 11111111 11111111 11111110(反码)

11111111 11111111 11111111 11111111(补码)

③零

这里要分为“正零”与“负零”讨论。

正零(可以参展①正整数的取法):

00000000 00000000 00000000 00000000(原码)

00000000 00000000 00000000 00000000(反码)

00000000 00000000 00000000 00000000(补码)

负零(可以参展②负整数的取法):

10000000 00000000 00000000 00000000(原码)

11111111 11111111 11111111 11111111(反码)

00000000 00000000 00000000 00000000(补码)

三、“~”操作符

1.简介

按(二进制)位取反,即把所有二进制位(包括符号位)中数字,1变成0,0变成1。

2.用法举例

由于整数在内存中存储的是补码,故使用"~"(按位取反)时需要转化为补码进行运算。此时,得到的结果仍为补码,需要进一步转化为原码,得到最终输出值。

①正整数

例如

1:

00000000 00000000 00000000 00000001(补码)

~1:

11111111 11111111 11111111 11111110(补码)

11111111 11111111 11111111 11111101(反码)

10000000 00000000 00000000 00000010(原码)

即~1的输出结果为-2

代码如下:

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

输出结果:-2

②负整数

例如

-1:

11111111 11111111 11111111 11111111(补码)

~-1:

00000000 00000000 00000000 00000000(补码)

00000000 00000000 00000000 00000000(反码)

00000000 00000000 00000000 00000000(原码)

即~-1的输出结果为0

代码如下:

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

输出结果:0

③零

由于正零与负零的补码相同,故不加以区分。

0:

00000000 00000000 00000000 00000000(补码)

~0:

11111111 11111111 11111111 11111111(补码)

11111111 11111111 11111111 11111110(反码)

10000000 00000000 00000000 00000001(原码)

即~0的输出结果为-1

代码如下:

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

输出结果:-1


总结

以上就是关于“~”的详解,涉及原码、反码及补码仅简单介绍,相关内容可参考计算机组成原理。

希望可以帮助大家,如有错误,望指出,谢谢!

C语言:“~”操作符详解相关推荐

  1. C语言操作符详解 隐式类型转换 (整型提升 算数转换)

    目录 一.算术操作符 二.左移操作符 右移操作符 1.二进制序列 2.左移操作符 3.右移操作符 3.1.逻辑运算/算术运算 3.2.对于移位运算符,不要移动负数位,这是标准未定义的 3.3.对于移位 ...

  2. C语言操作符详解------移位操作符

    今天给大家带来的是移位操作符的详解 首先大家在学习移位操作符之前要明确:移位操作符移动的是二进制位!!! <<   左移操作符 >>   右移操作符 注意:移位操作符的操作数只 ...

  3. C语言——操作符详解

    目录 一.算术操作符 二.移位操作符 三.位操作符 四.赋值操作符 五.单目操作符 六.关系操作符 七.逻辑操作符 八.条件操作符 九.逗号表达式 十.下标引用.函数调用和结构成员 以上就是C语言中涉 ...

  4. C#语言入门详解笔记(5)—P10、P11、P12 操作符详解_1_2_3

    C#语言入门详解_哔哩哔哩_bilibiliC#语言入门详解搬运,随youtube上进度更新.刘老师的C#视频教程到30集就告一段落了,感谢刘老师在这5年间的付出.能上youtube的同学可以去刘老师 ...

  5. C语言基础之操作符详解

    C语言基础之操作符详解 操作符的分类 算术操作符 移位操作符 位操作符 逻辑操作符 逗号表达式 表达式求值 隐式类型转换 算术转换 操作符的属性 xwg今天就带各位大佬来了解一波C语言的操作符. 操作 ...

  6. 【C语言】操作符详解(超详细)

    hello~~,我是~小鹿,超级详细的操作符讲解来康康吧 可以收藏随时找到这里哦~ [C语言]操作符详解(超详细) 1.算数操作符:+,-,*,/,% 2.位移操作符:<< , >& ...

  7. C语言学习笔记—P13(操作符详解<1>+图解+题例)

    目录 前言:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教! --By 作者:新晓·故知 操作符详解<1>:​ 题例: 1. 操作符分类: 算术操作符 移位操作 ...

  8. C#语言入门详解1-12

    可供参考的别人的学习笔记:https://blog.csdn.net/Jacey_cai/article/details/122848272 文章目录 一.课程简介.C#语言简介.开发环境准备 二.初 ...

  9. C语言位操作详解-4.2.C语言专题第二部分-朱有鹏-专题视频课程

    C语言位操作详解-4.2.C语言专题第二部分-11753人已学习 课程介绍         本课程的目标是让大家彻底掌握C语言中位运算符及常规技巧,这些知识在嵌入式代码中用的很多,尤其是设置寄存器以操 ...

  10. 完结篇:操作符详解(2)

    目录 一.单目操作符 1.!  逻辑反操作 补充:布尔类型 2.& 取地址操作符 3.* 间接访问操作符(解引用操作符) 4.sizeof 计算操作数的类型长度 5.~ 操作符 操作符的结合使 ...

最新文章

  1. Js下载文件到本地(兼容多浏览器)
  2. 关于深度学习的小知识点
  3. chrome浏览器插件开发经验(一)
  4. (Mybatis)XML配置解析
  5. 多语言制作工具(2013-01-24更新,支持VS2005、2008、2010、2012)(已开源)
  6. python三酷猫_洛克王国三代酷猫登场 冰水酷猫解析
  7. SSM简单参数传递与获取方法
  8. ES6 class 技术点拾遗
  9. win10安装python的xlrd_win10安装python的xlrd
  10. win10如何关闭F1~F12快捷键?
  11. 弱智的问题事例,决不能犯
  12. 不写一行代码,搭建Jenkins+Jmeter+Ant接口自动化框架
  13. 坚决反对“企业文学化”
  14. 27.Yii App应用
  15. bootstrap-select 插件使用详解
  16. cam全称_在ADU高级参数(parameter)中,术语CAM全称是什么?
  17. 凝聚 • 融合 • 协作——记webpower2015新春年会
  18. Flutter——实现flow布局,自定义绘制子控件
  19. 沁恒微USB蓝牙单片机CH573F初步熟悉
  20. 并行计算、分布式计算、网格计算讲解

热门文章

  1. python分层抽样_抽样方法—分层抽样
  2. 数据库索引到底是什么,是怎样工作的?
  3. 认知计算、大数据及人工智能革命
  4. Surface pro3电源管理
  5. 一文带你玩转 DataStore
  6. k8s集群安装traefik 2.x (保证成功版)
  7. 微信小程序支付接口对接总结
  8. c++正则表达式regex_match和regex_seach使用
  9. python pyodbc mysql,【python】 pyodbc连接mysql
  10. html弹窗确认取消公告代码,javascript实现确定和取消提示框效果