C语言中 原码、反码、补码 以及 取反(单目操作符 ~ )
欢迎大家评论区中指正呀,谢谢大家啦
文章目录
- 前言:必备知识
- 一、原码、反码、补码
- 1、原码
- 2、反码
- 3、补码
- 二、取反 (单目操作符 ~ )
- 1、数值8
- 2、数值-8
- 三、负整数 的 原码、反码、补码
- 四、正整数 的 原码、反码、补码
前言:必备知识
强调点:1、内存中存储的是 补码,打印显示在电脑屏幕上的是 原码;
2、反码 = 补码 - 1
3、因为计算机中存储是以补码的方式存储,所以我们对一个数取反,要先对它的补码进行取反,然后再求取反后的原码,而不是直接对其原码进行取反。
反码 = 补码 - 1
4、正整数的原码 反码 补码 是一样的;
5、负整数:原码,反码->原码的最高位符号位不变,其余位取反,
补码->反码+1。
6、最高位为1,表示负整数;最高位为0,表示正整数
一、原码、反码、补码
1、原码
原码由二进制原数值部分和符号部分组成
+1010101的原码为01010101,-1010101的原码为11010101,
0:正,1:负
2、反码
正数:反码和原码相同,为符号位加上原数值。
+10010101的反码为010010101
负数:反码为符号位不变加上原数值按位取反。-10010101的反码为101101010
3、补码
正数:补码,原码,反码相同。+110011补码为0110011
负数:补码为符号位加上原数值按位取反后再在最低位加 1,即为反码加 1 。-110011补码为1001101
二、取反 (单目操作符 ~ )
‘~’:单目运算符,对一个数的二进制位 按位取反。
以 8 和 -8 为例:
1、数值8
int main()
{int a = 8;printf("%d ", ~a);return 0; //输出结果:-9
}
数值 | 8 |
---|---|
原码 | 0000 0000 0000 1000 |
反码 | 0000 0000 0000 1000 |
补码 | 0000 0000 0000 1000 |
因为计算机中存储是以补码的方式存储,所以我们对一个数取反,要先对它的补码进行取反,然后再求取反后的原码,而不是直接对其原码进行取反。
补码取反(此时仍然是补码) | 1111 1111 1111 0111(单目运算符~,是对所有二进制位取反) |
---|---|
取反后的反码 | 1111 1111 1111 0110(反码 = 补码 - 1) |
取反后的原码 | 1000 0000 0000 1001 |
原码二进制转换为十进制为:-9
故 ~8 = -9
2、数值-8
int main()
{int a = -8;printf("%d ", ~a);return 0; //输出结果为:7
}
数值 | -8 |
---|---|
原码 | 1000 0000 0000 1000 |
反码 | 1111 1111 1111 0111 |
补码 | 1111 1111 1111 1000 |
补码取反(此时仍然是补码) | 0000 0000 0000 0111 |
取反后的反码 | 0000 0000 0000 0110(反码 = 补码 - 1) |
取反后的原码 | 0000 0000 0000 0110 (正数,原码、反码相同) |
原码二进制转换为十进制为:7
故 ~(-8) = 7
三、负整数 的 原码、反码、补码
#include<stdio.h>int main()
{int a = -1;printf("%d ", ~a);return 0; //输出结果:0
}
解释:
变量类型 int ,4个字节
-1:
原码:10000000 00000000 00000000 00000001
反码:111111111 111111111 111111111 111111110(符号位不变,其余取反)
补码:111111111 111111111 111111111 111111111 (反码 + 1)
代码中 ~ 是单目运算符:对一个数的二进制位 按位取反
内存中存储的是 补码,按位取反
得到:00000000 00000000 00000000 00000000,这是一个正整数(符号位为0),所以原码、反码、补码是相同的,所以结果为0。
补码取反(此时仍然是补码):00000000 00000000 00000000 00000000
取反后的反码:00000000 00000000 00000000 00000000
取反后的原码:00000000 00000000 00000000 00000000
原码二进制转换为十进制为:0
故 ~(-1) = 0
四、正整数 的 原码、反码、补码
#include<stdio.h>int main()
{int a = 0;printf("%d ", ~a);return 0; //输出结果:-1
}
解释
0:
原码:00000000 00000000 00000000 00000000
反码:00000000 00000000 00000000 00000000
补码:00000000 00000000 00000000 00000000
因为有 ~ ,所有二进制位按位取反
补码取反(此时仍然是补码):11111111 11111111 11111111 11111111
取反后的反码:11111111 11111111 11111111 11111110 (反码 = 补码 - 1)
取反后的原码:10000000 00000000 00000000 00000001
原码二进制转换为十进制为:-1
故 ~0 = -1
C语言中 原码、反码、补码 以及 取反(单目操作符 ~ )相关推荐
- java数字取反_java中源码反码补码与取反的理解
数字在计算机里是按照二进制来表示的. 箭头朝哪边就是朝哪边移动 补码,反码,和源码 负数原码转化为补码:符号位不变,数值位按位取反,末尾加一. 负数补码转化为原码:符号位不变,数值位按位取反,末尾加1 ...
- 关于计算机中 原码, 反码, 补码 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- c语言原码 补码 反码,C语言 原码--反码--补码
//原码,反码,补码 #include #include //数值的表示方法--原码.反码和补码 //原码:最高位为符号位,其余各位为数值本身的绝对值 //反码: //正数:反码与原码相同 //负数: ...
- C语言基础(二)—— 常量与变量、数据类型、进位制、关键字、原码反码补码、限定符、字符串格式化输入输出
1. 常量与变量 1.1 关键字 1.2 数据类型 数据类型的作用:编译器预算对象(变量)分配的内存空间大小. 1.3 常量 在程序运行过程中,其值不能被改变的量 常量一般出现在表达式或赋值语句中 整 ...
- 【濡白的C语言】数据的存储(大小端模式,原码反码补码,浮点数的存储,浮点型精度缺失的原因)
前言 很多学习C语言之后就会对各种类型感到很烦,但是数据的类型具有相当的意义.首先是类型决定了大小,即该数据在内存中开辟的空间大小:同时不同的类型还决定了数据存储的方式,相同的数据,存入整形与浮点型方 ...
- 大端 小端 原码 反码 补码 及内存中的表现
小端 和 大端 在内存中存储时,都是从内存的低地址往高地址存,即0x00000000 -> 0xffffffff 以汉字 "严"为例,Unicode码是4E25,需要两个字节 ...
- python二进制反码例题_python中的进制转换和原码,反码,补码
python中的进制转换和原码,反码,补码 计算机文件大小单位 b = bit 位(比特) B = Byte 字节 1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b 1KB ...
- 计算机中的原码,计算机中的原码反码补码移码
计算机中的原码反码补码移码 原码 数值 X 的原码记为 [X]原,如果机器字长为 n (即采用 n 个二进制位表示数据),则最高位是符号位,0 表示正号,1 表示负号,基余的 n~1 位表示数值的绝对 ...
- 浅谈 -128的原码 反码 补码
以java中byte表示:2字节 8位,-128 首先首位1表示负数,128的正数为1000 0000(其实是-128),然后拼接为1 1000 0000,大于8位,则取低8位,为1000 0000, ...
最新文章
- java缓冲流 复制文件_java使用缓冲流复制文件的方法
- 就想写个爬虫,我到底要学多少东西啊?
- 【MVC】ASP.Net MVC 4项目升级MVC 5的方法
- Could not find a version that satisfies the requirement PIL
- 用pv操作描述如下前驱图_跟我学PMP | PV、AC、EV…挣值管理的基本概念都是啥?...
- 腾讯游戏应邀2019大数据产业峰会BDIC | 荣获“大数据星河奖”并获颁测评证书...
- P7443-加边【博弈论】
- php网页表格样式,HTML5制作表格样式
- dmb显示服务器断开连接,dmb联网信息发布系统操作手册企业加强版.docx
- ros_readbagfile:未找到命令的解决方法
- 纵深防御及MS纵深防御模型
- C++11 override 和 final 关键字
- [Android实例教程] 教你如何拍照+相册选择图片+剪裁图片完整实现
- 为什么 Java 不支持类多重继承?
- java多线程生产消费者_JAVA多线程实现生产者消费者的实例详解
- python抓取天气预报_抓取天气预报的代码(Python)
- rgba通道转rgb_image – 将RGBA颜色转换为RGB
- 毕业设计之 ---- 基于JAVA WEB的网上购物系统的设计与实现
- python可视化窗口制作一个摇骰子游戏_通过构建一个简单的掷骰子游戏去学习怎么用 Python 编程...
- 我的2013拾遗总结~ 多么痛的领悟!