原码 反码 补码及应用
原码 反码 补码及应用
原码
什么是原码?
原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负。
56 ==> 0 0111000
符号位 数据
最大值:01111111 ==> 127
最小值:11111111 ==> -127
原码的数值计算
00000001 ==> 1
00000010 ==> 2
利用原码对正数计算是不会有问题的。
原码的弊端
10000000 ==> 0
我们对0 + 1,0+1=1
但1000000 + 1 为10000001 ,而10000001 ==> -1
在对负数进行运算时出现了错误,实际运算结果与预期结果是相反的。此时我们引入反码
反码
什么是反码
反码:正数的反码是其本身,负数的反码是符号位保持不变,其余位取反。
数值计算
计算规则:正数的反码不变,负数的反码在原码的基础上,符号位不变,数值取反,0变1,1变0。
-56 ==> 10111000 (原码)
11000111 (反码)
-56 + 1 = -55
-55 ==> 11001000 (反码)
-55 <== 10110111 (原码)
反码的弊端
负数运算时,如果不跨0,没有任何问题,如果跨0,就会与实际结果有1的偏差
-4+4 = 0
-4 ==> 10000100(原码) 11111011(反码)
+4 = 11111111 (反码)== > 10000000 (正码)==> -0
-4+5 = 1
-4 ==> 10000100(原码) 11111011(反码)
+5 = 00000000 (反码)== > 00000000 (正码)==> +0
所以引入补码
补码
什么是补码
补码:正数的补码是其本身,负数的补码是在其反码的基础上+1。
十进制数字 | 原码 | 反码 | 补码 |
---|---|---|---|
+0 | 00000000 | 00000000 | 00000000 |
-0 | 10000000 | 11111111 | 00000000 |
-1 | 10000001 | 11111110 | 11111111 |
-2 | 10000010 | 11111101 | 11111110 |
-3 | 10000011 | 11111100 | 11111101 |
-4 | 10000100 | 11111011 | 11111100 |
… | … | … | … |
-127 | 11111111 | 10000000 | 11111111 |
-128 | 无 | 无 | 10000000 |
补码出现的目的
为了解决负数计算时跨0的问题而出现的。
计算规则
正数的补码不变,负数的补码在反码的基础上+1
另外补码还能多记录一个特殊的值-128,该数据在一个字节下,没有反码和原码、
补码注意的点
计算机中的存储和计算都是以补码的形式进行的。
应用
强制转换
public class Test{public static void main(Strinf[] args){int a = 300;// 00000000 00000000 00000001 00101100byte b = (byte)a;System.out.println(b);// 00101100 ==> 44}
}
00101100 (原码)== > 00101100(反码)> 00101100(补码)> 44
public class Test{public static void main(Strinf[] args){int a = 200;// 00000000 00000000 00000000 11001000byte b = (byte)a;System.out.println(b);// 11001000 ==> -56}
}
11001000(原码)== > 10110111(反码)== > 10111000(补码)==> -56
其他运算符
运算符 | 含义 | 运算规则 |
---|---|---|
& | 逻辑与 | 0为false,1为true |
| | 逻辑或 | 0为false,1为true |
<< | 左移 | 向左移动,低位补0 |
>> | 右移 | 向右移动,高位补0或1 |
>>> | 无符号左移 | 向右移动,高位补0 |
&:逻辑与
public class Test{public static void main(Strinf[] args){int a = 200;// 00000000 00000000 00000000 11001000int b = 10; // 00000000 00000000 00000000 00001010System.out.println(a & b);}
}
00000000 00000000 00000000 11001000
& 00000000 00000000 00000000 00001010
00000000 00000000 00000000 00001000 ==> 8
|:逻辑或
public class Test{public static void main(Strinf[] args){int a = 200;// 00000000 00000000 00000000 11001000int b = 10; // 00000000 00000000 00000000 00001010System.out.println(a & b);}
}
00000000 00000000 00000000 11001000
| 00000000 00000000 00000000 00001010
00000000 00000000 00000000 11001010 ==> 202
<<:左移
public class Test{public static void main(Strinf[] args){int a = 200;// 00000000 00000000 00000000 11001000System.out.println(a << 2);//800}
}
>>:右移
public class Test{public static void main(Strinf[] args){int a = 200;// 00000000 00000000 00000000 11001000System.out.println(a >> 2);// 50}
}
原码 反码 补码及应用相关推荐
- 关于计算机中 原码, 反码, 补码 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- 原码, 反码, 补码, 移码 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- 关于 原码 反码 补码 位运算
二进制 原码:最高位为符号位,0为正 1为负 正数的原码 反码 补码 都是相同的 反码:负数的反码为原码符号位不变 其它对应变化(1变0 0变1) 补码:等于 反码+1 3^-3 =? 运算过程 - ...
- 10.原码 反码 补码
+7的原码:0000 0111 -7的原码:1000 0111 第一位0代表正数,1代表负数,第一位为符号位 +7的反码:0000 0111 正数反码和原码一样 -7的反码:1111 1000 ...
- java进制原码_Java 一一 进制、原码 反码 补码、移位操作
进制 二进制 和 十进制 相互转换 十进制 和 十六进制 相互转换 原码,反码,补码 原码.反码.补码: 在计算机内, 有符号数有三种表示法: 原码, 反码, 补码. 所有的数据的运算都是采用 补码 ...
- 大端 小端 原码 反码 补码 及内存中的表现
小端 和 大端 在内存中存储时,都是从内存的低地址往高地址存,即0x00000000 -> 0xffffffff 以汉字 "严"为例,Unicode码是4E25,需要两个字节 ...
- 原码 反码 补码 详解
一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放 ...
- python二进制反码例题_python中的进制转换和原码,反码,补码
python中的进制转换和原码,反码,补码 计算机文件大小单位 b = bit 位(比特) B = Byte 字节 1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b 1KB ...
- 原码 反码 补码 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- 【原码, 反码, 补码的基础概念和计算方法】
数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念. 原码就是符号位加上数字的二进制表示, 即用第一位表示符号, 其余位表示值. 反码的表示方法 ...
最新文章
- LeetCode简单题之K 进制表示下的各位数字总和
- Linux防火墙与iptables命令
- 事业单位招 计算机面试实践技能操作,2019山东事业单位卫生类招聘面试实践技能概论...
- 非对称加密算法RSA--转
- 利用gcc的__attribute__编译属性section子项构建初始化函数表【转】
- 史上最走心的Webpack4.0中级教程——配置之外你应该知道事
- 【人脸识别】基于matlab GUI Haar分类器五官定位【含Matlab源码 686期】
- dnf 跨服 服务器 位置,dnf跨区怎么跨_dnf国服跨区表_快吧游戏
- 真的来了!IO-Link无线-释放传感器/执行器巨大潜力的工业无线解决方案,设备远程监控新选择!(Part 3)
- 华为(BGP路由技术)
- 保密单位 计算机维修保密协议,计算机维修保密协议.doc
- 前端框架是什么意思?
- Powershell 操作Excel的基本命令
- 博客系统 - 系统简介与首页设计
- 反向迭代器和正向迭代器
- 中职教资证计算机应用,中职计算机教师资格证只能教中职学校的吗
- Socket 系统调用深入研究(TCP协议的整个通信过程)
- 一文读懂数字孪生的应用及意义
- aw2013驱动分析
- for循环和while循环哪个效率更高