原码 true code
原码很简单,一个10进制正数通过除2法转换成的2进制数就是原码。
比如8的原码是:1000
反码 complement,bitwise NOT
也很简单,就是翻转每个bit。比如:
NOT 0111 (decimal 7)
= 1000 (decimal 8)
C/C++语言中,用~运算符就可以得到反码。
One's complement这是一种对有符号整数的计算机内部二进制表示方法,in short,正数相同,负数用反码。下面的例子来自wikipedia.
The table below shows all possible values in a 4-bit system, from −7 to +7.
+ -
0 0000 1111 Note that +0 and −0 return TRUE when tested for zero, FALSE when tested for non-zero.
1 0001 1110
2 0010 1101
3 0011 1100
4 0100 1011
5 0101 1010
6 0110 1001
7 0111 1000
该方法由于有些缺点,并不常用。
Two's complement
这是最常用的计算机表示有符号整数的方法。
遇到正数不变,遇到负数是将二进制求反加1,忽略溢出。
The table below shows all possible values in a 4-bit system, from −7 to +7.
+ -
0 0000 Note 0 has only one presentation:0000,no -0
1 0001 1111
2 0010 1110
3 0011 1101
4 0100 1100
5 0101 1011
6 0110 1010
7 0111 1001
这就是常说的补码。
补码
补码的逻辑算法是:(正数相同,符号位为0)
1.-7的数值部分(不包括符号) 表示成整数是111
2.加上符号1表示负数,因此是1111
3.只反转非符号位,因此是1000
4.加上1,因此是1001
现在看看计算机如何使用two's complement表示-7的算法。
1.7表示位00000111 (在计算机中数字至少占一个字节)
2.取反后,变成11111000
3.加1后,变成11111001 (高位不足计算机里面用符号位补足)
两者结果相同。
分享到:
相关推荐
原码反码和补码PPT学习教案.pptx
c++ 计算机底层 原码反码补码的练习题,包括答案
程序可将不限定位数的原码转成补码和反码,将反码转换成原码和补码,将补码转换成原码和反码,程序基于.NET 4.0,使用VS2012开发工具编写。
原码反码补码讲课.pptx
数字的原码、反码和补码
16进制(4位)到二进制原码、反码、补码计算
/* *功能实现任意二进制数的原码 反码 补码转换 *仅仅是字符串的操作,没有进行数字操作 *对-0的操作可能有问题 *ssfshine@gmail.com */
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法.
原码、反码、补码
计算机中的原码、反码和补码的详细解释。。。。
原码反码补码PPT学习教案.pptx
原码反码补码图解.原码反码补码图解.原码反码补码图解.
学习原码, 反码和补码之前, 需要先了解机器数和真值的概念
利用C++的MFC实现原码、补码、反码的转换
原码、反码、补码、移码与浮点.doc
讲说原码 补码以及反码的基本知识,需要时可以看一看。
原码、反码、补码 的相关原理 原码、反码、补码 的相关原理
对于原码,反码和补码很懵逼的人群
原码 (1) 原码:在数值前直接加一符号位的表示法。 例如: 符号位 数值位 byte的取值范围 [+7]原= 0 0000111 B [-7]原= 1 0000111 B 注意: byte的取值范围是-2^7~ 2^7-1 总计256个数 即: 无符号位 0~255 (因为...
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家...