黑马程序员技术交流社区
标题:
关于源码,反码,补码问题
[打印本页]
作者:
sen
时间:
2014-4-13 21:42
标题:
关于源码,反码,补码问题
本帖最后由 sen 于 2014-5-20 11:59 编辑
在网上搜索了很多资料,可是太复杂了。
无法看懂,求简单不抽象的解释
作者:
blz01003hm
时间:
2014-4-13 21:59
本帖最后由 blz01003hm 于 2014-4-13 22:38 编辑
3的原码是0000 0011即3除以2商1余数是1 用商1除以2商是0余数是1 即0第一位, 第一个余数第二位,第二个余数第三位即 011 (但电脑里一个字节由8个位组成 不足用0补)
3的反码是1111 1100即0000 0011取反1111 1100 即0变1,1变0
3的补码是0000 0011
作者:
星河鹭起
时间:
2014-4-13 23:50
原码:就是二进制数,以2为例子,首先2是整数,因此占用了4个字节,八位;所以
原码是:0000 0010
方法:从右往左以2的次方来算,从0开始,因此是0乘2的7次方+0乘2的6次方+0乘2的5次方+0乘2的4次方+0乘2的3次方+1乘2的1次方+0乘2的0次方 所以是2;
反码:就是将0变1,1变0,所以变成了1111 1101
补码:就是反码加1 变成了1111 1110
注:反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
作者:
程序猿-2014
时间:
2014-4-14 00:13
首先 正码(源码) 反码 补码他们在内存中都是二进制储存的 而且都是他们的补码
下面以正12和-12为例
12的二进制
12在内存中存储的是它的补码
00000000 00000000 00000000 00001100
正数的特点: (三码合一) 正数的原码就是TA的反码就是TA的补码
-12
二进制的最高位我们称之为符号位
如果符号位是0代表是一个正数,
如果符号位是1代表是一个负数
10000000 00000000 00000000 00001100 (-12的原码)
11111111 11111111 11111111 11110011(反码, 符号位不变其它位取反)
11111111 11111111 11111111 11110011
+00000000 00000000 00000000 00000001
_____________________________________________
11111111 11111111 11111111 11110100(补码 , 反码+1)
结论:无论正数负数在内存中存储的都是补码
11111111 11111111 11111111 11110101 (补码)
-00000000 00000000 00000000 00000001 (-1)
_____________________________________________
11111111 11111111 11111111 11110100 (反码)
10000000 00000000 00000000 00001011
作者:
董月峰
时间:
2014-4-14 07:40
http://850361034.blog.163.com/blog/static/3280380920143130203305/ 楼主想详细了解可以看下我的这篇博客
作者:
Dmajor
时间:
2014-4-14 10:02
本帖最后由 Dmajor 于 2014-4-14 10:04 编辑
其实很简单的 先看数的正负,正数的三码相同
负数的原码首位是1,其后是相应正数的二进制码
反码是在原码的基础上除符号位不变外,其余的取反 (取反就是0变1,1变0)
补码就是在反码的基础上加1
例如:+5的原码,反码,补码都是 0101(正数首位为0)
-5的原码是:1101(负数首位为1)
反码:1010(除过符号位,其余取反)
补码:1011(在反码的基础上加1)
作者:
heima-王鹏
时间:
2014-4-14 20:37
1.数据在计算机内存中是以二进制形式进行存储的,在存储时要先开辟空间,然后再进行存储。
2.一个字节八个二进制位,整数的最高位为0,负数的最高位为1,正数的原码、反码、补码都一样(三位一体),负数的反码是原码取反,负数的补码是反码加1,在计算机二进制是以反码形式进行存储的。
作者:
m573555543
时间:
2014-4-15 12:47
源码,反码,补码都是在二进制下算的。
例:char 字型中的1,源码是
0[/color
]000 0001
.
第一个0通常来做符号,也就是正号和负号。
剩下的来表示值。
反码:正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
补码:正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
作者:
sen
时间:
2014-4-15 15:11
好的 谢谢大家
作者:
悠悠·漠漠
时间:
2014-4-16 00:26
其实我比较疑问的是为什么,正数的原码、反码、补码是三码一体,而负数的却是反码为符号位不变,其他位按位取反,补码又是反码+1??又为什么是+1,而不是其他的值???
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2