C语言:“~”操作符详解
~:含义及用法举例
文章目录
- 前言
- 一、“~”是什么?
- 二、原码、反码及补码
- 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语言:“~”操作符详解相关推荐
- C语言操作符详解 隐式类型转换 (整型提升 算数转换)
目录 一.算术操作符 二.左移操作符 右移操作符 1.二进制序列 2.左移操作符 3.右移操作符 3.1.逻辑运算/算术运算 3.2.对于移位运算符,不要移动负数位,这是标准未定义的 3.3.对于移位 ...
- C语言操作符详解------移位操作符
今天给大家带来的是移位操作符的详解 首先大家在学习移位操作符之前要明确:移位操作符移动的是二进制位!!! << 左移操作符 >> 右移操作符 注意:移位操作符的操作数只 ...
- C语言——操作符详解
目录 一.算术操作符 二.移位操作符 三.位操作符 四.赋值操作符 五.单目操作符 六.关系操作符 七.逻辑操作符 八.条件操作符 九.逗号表达式 十.下标引用.函数调用和结构成员 以上就是C语言中涉 ...
- C#语言入门详解笔记(5)—P10、P11、P12 操作符详解_1_2_3
C#语言入门详解_哔哩哔哩_bilibiliC#语言入门详解搬运,随youtube上进度更新.刘老师的C#视频教程到30集就告一段落了,感谢刘老师在这5年间的付出.能上youtube的同学可以去刘老师 ...
- C语言基础之操作符详解
C语言基础之操作符详解 操作符的分类 算术操作符 移位操作符 位操作符 逻辑操作符 逗号表达式 表达式求值 隐式类型转换 算术转换 操作符的属性 xwg今天就带各位大佬来了解一波C语言的操作符. 操作 ...
- 【C语言】操作符详解(超详细)
hello~~,我是~小鹿,超级详细的操作符讲解来康康吧 可以收藏随时找到这里哦~ [C语言]操作符详解(超详细) 1.算数操作符:+,-,*,/,% 2.位移操作符:<< , >& ...
- C语言学习笔记—P13(操作符详解<1>+图解+题例)
目录 前言:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教! --By 作者:新晓·故知 操作符详解<1>: 题例: 1. 操作符分类: 算术操作符 移位操作 ...
- C#语言入门详解1-12
可供参考的别人的学习笔记:https://blog.csdn.net/Jacey_cai/article/details/122848272 文章目录 一.课程简介.C#语言简介.开发环境准备 二.初 ...
- C语言位操作详解-4.2.C语言专题第二部分-朱有鹏-专题视频课程
C语言位操作详解-4.2.C语言专题第二部分-11753人已学习 课程介绍 本课程的目标是让大家彻底掌握C语言中位运算符及常规技巧,这些知识在嵌入式代码中用的很多,尤其是设置寄存器以操 ...
- 完结篇:操作符详解(2)
目录 一.单目操作符 1.! 逻辑反操作 补充:布尔类型 2.& 取地址操作符 3.* 间接访问操作符(解引用操作符) 4.sizeof 计算操作数的类型长度 5.~ 操作符 操作符的结合使 ...
最新文章
- Js下载文件到本地(兼容多浏览器)
- 关于深度学习的小知识点
- chrome浏览器插件开发经验(一)
- (Mybatis)XML配置解析
- 多语言制作工具(2013-01-24更新,支持VS2005、2008、2010、2012)(已开源)
- python三酷猫_洛克王国三代酷猫登场 冰水酷猫解析
- SSM简单参数传递与获取方法
- ES6 class 技术点拾遗
- win10安装python的xlrd_win10安装python的xlrd
- win10如何关闭F1~F12快捷键?
- 弱智的问题事例,决不能犯
- 不写一行代码,搭建Jenkins+Jmeter+Ant接口自动化框架
- 坚决反对“企业文学化”
- 27.Yii App应用
- bootstrap-select 插件使用详解
- cam全称_在ADU高级参数(parameter)中,术语CAM全称是什么?
- 凝聚 • 融合 • 协作——记webpower2015新春年会
- Flutter——实现flow布局,自定义绘制子控件
- 沁恒微USB蓝牙单片机CH573F初步熟悉
- 并行计算、分布式计算、网格计算讲解