二进制正负数转换数的正负如何表示?1任何数是不是在储存空间里

十进制整数转化成二进制数,支持正负数
#include&iostream&long mirror(long x,long count)//求镜面数{&&&&&&& long mirror_x=1,count_=count,tmp=1;&&&&&&& if(count&0)&&&&&&& {&&&&&&&&&&&&&&& while(count&0)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&& mirror_x*=10;&&&&&&&&&&&&&&&&&&&&&&& mirror_x+=x%10;&&&&&&&&&&&&&&&&&&&&&&& x/=10;&&&&&&&&&&&&&&&&&&&&&&& --&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& for(;count_&0;--count_)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&& tmp*=10;&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& mirror_x-=&&&&&&& }&&&&&&& return mirror_x;}long compute(long x){&&&&&&& long tmp=0,count=1,number_B=0,number_D=0;&&&&&&&//控制变量,记录数值的正负号,负号时sign=1&&&&&&& if(x&0)&&&&&&& {&&&&&&&&&&&&&&& sign=1;&&&&&&&&&&&&&&& tmp=abs(x);&&&&&&& }&&&&&&& else&&&&&&& {&&&&&&&&&&&&&&& sign=0;&&&&&&&&&&&&&&& tmp=x;&&&&&&& }&&&&&&& if(tmp&=2)&&&&&&& {&&&&&&&&&&&&&&& do&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&& number_B=number_B*10+tmp%2;&&&&&&&&&&&&&&&&&&&&&&& tmp=tmp/2;&&&&&&&&&&&&&&&&&&&&&&& ++&&&&&&&&&&&&&&& }while(tmp&=2);&&&&&&&&&&&&&&& number_B=number_B*10+&&&&&&&&&&&&&&& number_D=mirror(number_B,count);&&&&&&&&&&&&&&& if(sign==1)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&& number_D*=-1;&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& return number_D;&&&&&&& }&&&&&&& else&&&&&&& {&&&&&&&&&&&&&&&&&&&&&& }}long main(){&&&&&&& //number_D代表十进制,number_B代表二进制&&&&&&& long number_D=0,number_B=0;&&&&&&& std::cout&&"书中叶 编写 QQ:"&&std::&&&&&&& std::cout&&"请输入十进制整数:";&&&&&&& std::cin&&number_D;&&&&&&& number_B=compute(number_D);&&&&&&& std::cout&&number_D&&"的二进制数为:"&&number_B&&std::&&&&&&& system("pause");&&&&&&& return 0;}
分享这篇日志的人也喜欢
玩音乐`漂成都演出现场
我在,你在哪?
我是不是你最疼爱的人
想吃播了哈哈
热门日志推荐
人人最热标签
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&
请输入手机号,完成注册
请输入验证码
密码必须由6-20个字符组成
下载人人客户端
品评校花校草,体验校园广场计算机的二进制带符号运算为什么用0表示正数1表示负数 - 业余程序员 - ITeye技术网站
博客分类:
以8b为例对比如下:(谁能给我补补课,说说为什么是正0负1,按照我的理解应该是正1负0更符合人类的思维,前者是进行了一次技术上的mapping了)
+1 0 000 0001
-1 1 000 0001
-1 1 111 1110
-1 1 111 1111
0 000 0001
1 111 1111
------------
10 000 0000
而如果反过来就会是这样的:
+1 1 000 0001
-1 0 000 0001
-1 0 111 1110
-1 0 111 1111
1 000 0001
0 111 1111
------------
10 000 0000
= (溢出位 8b考虑为 +0):相关链接:
http://dev.csdn.net/develop/article/17/17680.shtm
逆向推理:
先有正数运算,再有负数,才会产生有符号运算所遇到的问题。
按照离散数学的原理,需要解决的问题有两个:
1、负0怎样才能和正0具有相同的标志;
2、其他负数如何确定各自的标志;
3、运算规律是否可行;
下面给出我的推导过程及最后的公式,我觉得 原码和反码的转换公式要比以前我看到的教程简单很多。
一、拿二位10进制为例
可得排列组合(标志)为00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19 共计2*10^1 = 20 个数,为正数1~9 、 0 、和负数10个。(因为正数和0在负数概念出现以前已经确定,所以剩下的数为负数)。
二、拿二位2进制为例
同理有标志00 01 10 11,00为+0,01为+1,推理另两个标志对应的负数。
同样的方法可以放到三位二进制 ,四位二进制等,表示为x位n进制可得到公式:
负数原码和补码的转换公式:1v = -(n^(x-1)-v)
放到8位2进制即:1v=-(2^7-v)
代入8位二进制即使
= - (2^7-0)= -128;
= -(2^7-1) = -127;
= -(2^7-2) = -126;
= -(2^7-(2^7-1)) = -1;
"-1就是减1嘛,想一想减去1应该是多少呢,不够就借位,那就是"
这句话同样体现了前提:不破坏先前的正数(包括0)的运算法则。
结:那些计算机教材写得真垃圾啊,就这么简单的问题搞锤子求反+1 ,基本上无逻辑可言。
结合离散等数学知识,这个问题是不是可以延伸到内存寻址等相关方面呢?
浏览 12495
论坛回复 /
(16 / 16616)
一 确信你是对的?OXFF 是 是-127 不是-1 -1的原码是
用16进制表示是 OX7F 是否你搞混了这几种编码 还是我没理解你的说法?二 不明白你在说什么 正数 源码 反码 补码 都是本身 你说”单字节有符号整数,正数部分的取值范围是0x00-0x7F。求补码时取反加1,对应0xFF-0x81。“不理解补码数,x的相反数,就是x求反再加1于是-1就等于 1取反再加1就是
+ 1 = -(-1)就是-1取反再加1就是
程序员一懒就用了 1 来表示 负 是说得通的
程序员一懒就用就用补码 好像没什么道理
反过来 带符号运算 不用补码可以吗?
解释下 反过来是 说 ”1表示正 0表示负“ 这种情况下 补码也是必需的
单字节有符号整数,-1的表示应该是 (0xFF),而不是0x7F。
单字节有符号整数,正数部分的取值范围是0x00-0x7F。求补码时取反加1,对应0xFF-0x81。所以所有负数的最高位都是1。
一 确信你是对的?OXFF 是 是-127 不是-1 -1的原码是
用16进制表示是 OX7F 是否你搞混了这几种编码 还是我没理解你的说法?
二 不明白你在说什么 正数 源码 反码 补码 都是本身 你说
”单字节有符号整数,正数部分的取值范围是0x00-0x7F。求补码时取反加1,对应0xFF-0x81。“不理解
再想了下 这个问题的其实是前提错掉了 ,按照人来的思维并不是 用1来表示正 就合理了
因为符号是处在和数字不同的层面上了 ,先有了无符号运算也是理所当然,后来要引入无符号运算,
自然得多一个符号出来,原来是没有的 现在需要一个 这就是 从无到有的过程 用1来表示"有" "0"来表示无
又回到了”理所当然“的路上,符号和数字不能在同一个层面上考虑,自然也不能拿数字的含义来表示
思考正负号了。
最近看到某处有人说中国人的二进制使用比西方早了4K多年,”易有太极,是生两仪,两仪生四象,四象生八卦,八卦定极凶,吉凶生大业“,被影响了,嘿嘿
附:生命中不能承受之轻 存在即真理 不停寻找& 真理是当时只有汇编,没有C这种高级语言
想要结构化编程都很困难
只好hack这种恶心的需求。
PS:汇编中的一个if else 写出来都会死人的。。。。
jianfeng008cn
浏览: 162118 次
来自: 湖州
非常感谢 一直在找破解的
要破解的 这东西?????
非常感谢啊,顶,就一个字
哈哈,谢谢了二进制中第一位0代表正;1代表负我知道,但是给你;那么转化成十进制应该是多少?5?但不是说首位为1;谁能给我讲讲这个首位什么时候作为符号,什么时候作;如果你有这种疑问,那就是没有高清概念有问题,我们;一:表示法:;1、正数5的表示法;假设有一个int类型的数,值为5,那么,我们知道;;5转换成二制是101,不过
二进制中第一位0代表正;1代表负我知道,但是给你一个二进制的数比如101
那么转化成十进制应该是多少? 5?
但不是说首位为1应该是负的吗???
谁能给我讲讲这个首位什么时候作为符号,什么时候作为数字去计算?什么时候可以直接计算,什么时候需要取反?我怎么知道它是正数还是负数?
如果你有这种疑问,那就是没有高清概念有问题,我们只有在说计算机处理数时,会用0和1代表正负,这种数称之为机器数(包括原码,反码,补码);
一:表示法:
1、正数5的表示法
假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:
5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。
2、负数-5的表示法
现在想知道,-5在计算机中如何表示?在计算机中,负数以原码的补码形式表达。
二、概念:
1、原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。
比如 000101 是 5的 原码。
000101 是 -5的 原码。
备注: 比如byte类型,用2^8来表示无符号整数的话,是0 - 255了;如果有符号,最高位表示符号位,0为正,1为负,那么,正常的理解就是 -127 至 +127 了.这就是原码了,值得一提的是,原码的弱点,有2个0,即+0和-0(000000);还有就是,进行异号相加或同号相减时,比较笨蛋,先要判断2个数的绝对值大小,然后进行加减操作,最后运算结果的符号还要与大的符号相同;于是,反码产生了。
2、反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反[每一位取反(除符号位)]。
取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)
正数000101
其反码还是 000101
负数000101
其反码则是 111010。
反码是相互的,所以也可称:00
和 11 互为反码。
备注:还是有+0和-0,没过多久,反码就成为了过滤产物,也就是,后来补码出现了。
3、补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
的反码是:111010。
那么,补码为:111010 + 1
等于 111011
备注:1、从补码求原码的方法跟原码求补码是一样的 ,也可以通过完全逆运算来做,先减
1,再取反。
2、补码却规定0没有正负之分
所以,-5 在计算机中表达为:11 。
转换为十六进制:0xFFFFFFFB。
三、再举一例
我们来看整数-1在计算机中如何表示。假设这也是一个int类型,那么:
1、先取-1的原码:000001
2、得反码:
111110(除符号位按位取反)
3、得补码:
可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF
四、主要知识点:
正数的反码和补码都与原码相同。
负数的反码为对该数的原码除符号位外各位取反。
负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1
源码:优点在于换算简单 缺点在于两个零 加减法需要独立运算
反码:优点在于表示清晰 缺点在于两个零 加减法同样需要独立运算
补码:优点在于一个零 范围大
减法可以转为加法 缺点在于理解困难
下面是书上原文:
原码表示法规定:用符号位和数值表示带符号数,正数的符号位用“0”表示,负数的符号位用“1”表示,数值部分用二进制形式表示。
反码表示法规定:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。 补码表示法规定:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
正零和负零的补码相同,[+0]补=[-0]补=B
五、特殊情况-128
,那么,它的原码是什么呢?从补码求原码的方法跟原码求补码是一样的。先保留符号位其它求反:
, 再加1,, 超过了8位了。对,用8位数的原码在这里已经无法表示了。
那么,回到原码处, 它的原码也是 (超出的自动丢失), 在原码表示什么呢? -0, 但补码却规定0没有正负之分。
转换一下思路,看看计算机里,是怎么运算的: 对于负数,先取绝对值,然后求反,加一 -128 -& 128 -&
现在明确了吧
所以, 8位有符号的整数取值范围的补码表示
即 -128 到 0, 再到 127
最终 -128 ~ +127
永远记住:程序里的加减法对 二进制是永远有效的。但是并不一定适合于真实世界。
byte m = -128;
byte q = 1;
byte p = (byte)(m - q); //这一步其实编译器会报错,其实是发现越界了,我们强行转化为byte就可以看出结果。
System.out.println( p); p的结果为:127
三亿文库包含各类专业文献、外语学习资料、行业资料、各类资格考试、高等教育、文学作品欣赏、生活休闲娱乐、36二进制中正负数表示和判断等内容。 
 二进制中的负数表示方法_计算机软件及应用_IT/计算机_专业资料。二进制中的负数...如果是一个 8 位的有符号整数,这个二进制数应该表示为 ,最高一位是...  1 变成 0:
这称为 1 的原码形式,如果给这个数加上 1,就得到了 2 的补码形式:
这就是从+4 中减去+12,得到的C8 的二进制表示。...  先要判断 2 个数的绝对值大小,然后进行加减操作,...-0, 但补码却规定 0 没有正负之分。 转换一下...二进制中的负数表示方法 1页 免费
第2课时 在直线...  整数二进制编码 正数负数_工学_高等教育_教育专区。...有符号数中最高位用于表示正负,所以,当为正值 时...在做减法时,还要判断操作数绝对值的大小,这些都会使...  C 语言正负整数的二进制表示及二进制输出格式 讲 C 语言数据类型时,讲到整数是在计算机的存储单元中按整数的补码形式存放的, 这是学生很难理解补码是什么。 其实...  二进制数在计算机中的表示 1、机器数和机外数(真值数) 真值数为-1001100(B)的机器数为 ,即:
符号位: (0 为正数;1 为负数) 数的表示...  负数怎么转换成二进制.txt_数学_自然科学_专业资料。...能表示 27 个数的绝对值,再考虑正负两种情况,27*...负整数在计算机中是以补码形式储存的,补码是怎么样...  二、带符号二进制数的减法运算:二进制数的正、负号也是用 0/1 表示的。 最...具体判断溢出的方法:当方框中的进位位与和数的符号位(即 b3 位)相反时,则...  (D) 9.在定点二进制运算中,减法运算一般通过 A、...判断题(10 每题 2 分) 1.计算机表示的数发生...补码的特点是加、减法运算规则简单,正负数的处理方法...}

我要回帖

更多关于 二进制怎么判断正负 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信