原码 反码 补码及应用
原码 反码 补码及应用
原码
什么是原码?
原码:十进制数据的二进制表现形式,最左边是符号位,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 ...
- 原码 反码 补码 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- 【原码, 反码, 补码的基础概念和计算方法】
数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念. 原码就是符号位加上数字的二进制表示, 即用第一位表示符号, 其余位表示值. 反码的表示方法 ...
最新文章
- 马斯克来了!瞄准1万亿美元电信市场,星链「村村通」在美获突破
- Nginx负载均衡配置实例详解(转)
- 数据结构和算法一定要背算法的代码嘛_我们为什么要学习数据结构和算法?
- Understanding Generative Adversarial Networks (GAN)
- Centos6 安装RabbitMq3.7.7
- 【笔记】8位流水线乘法器(Verilog)
- free C# Ebook (Amazing amount of ebooks available)
- 阿里云流水线主机离线启动
- ajax同步时,loading加载不显示(谷歌浏览器)
- struts 的radio标记的增强
- c语言如何算字节,C语言中结构字节的计算方法
- 招行首发芭比娃娃MP3
- 【c/c++】一直想写那个盗取别人手机号码的CODE
- 老师计算机组合照说说,有关老师的说说
- php获取域名去掉www,php获取域名_PHP 获取域名的几种方法
- html全屏飘雪花特效,html5 3D飘落雪花动画特效
- Android 仿微信刷新旋转小风车 自定义view
- c语言常用的专业术语对照,C语言术语对照表.doc
- 死磕算法第一弹——数组、集合与散列表
- 么在笔记本电脑桌面上添加备忘录?