二进制中正负数表示和判断
更新时间:2023-05-14 11:45:01 阅读量: 实用文档 文档下载
二进制中第一位0代表正;1代表负我知道,但是给你一个二进制的数比如101
那么转化成十进制应该是多少? 5? 但不是说首位为1应该是负的吗???
谁能给我讲讲这个首位什么时候作为符号,什么时候作为数字去计算?什么时候可以直接计算,什么时候需要取反?我怎么知道它是正数还是负数?
如果你有这种疑问,那就是没有高清概念有问题,我们只有在说计算机处理数时,会用0和1代表正负,这种数称之为机器数(包括原码,反码,补码);
一:表示法:
1、正数5的表示法
假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:
00000000 00000000 00000000 00000101
5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。
2、负数-5的表示法
现在想知道,-5在计算机中如何表示?在计算机中,负数以原码的补码形式表达。
二、概念:
1、原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。
比如 00000000 00000000 00000000 00000101 是 5的 原码。
10000000 00000000 00000000 00000101 是 -5的 原码。
备注: 比如byte类型,用2^8来表示无符号整数的话,是0 - 255了;如果有符号,最高位表示符号位,0为正,1为负,那么,正常的理解就是 -127 至 +127 了.这就是原码了,值得一提的是,原码的弱点,有2个0,即+0和-0(10000000和00000000);还有就是,进行异号相加或同号相减时,比较笨蛋,先要判断2个数的绝对值大小,然后进行加减操作,最后运算结果的符号还要与大的符号相同;于是,反码产生了。
2、反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反[每一位取反(除符号位)]。
取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)
比如: 正数00000000 00000000 00000000 00000101
其反码还是 00000000 00000000 00000000 00000101
负数10000000 00000000 00000000 00000101
其反码则是 11111111 11111111 11111111 11111010。
反码是相互的,所以也可称:10000000 00000000 00000000 00000101
和 11111111 11111111 11111111 11111010互为反码。
备注:还是有+0和-0,没过多久,反码就成为了过滤产物,也就是,后来补码出现了。
3、补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
比如: 10000000 00000000 00000000 00000101
的反码是:11111111 11111111 11111111 11111010。
那么,补码为:11111111 11111111 11111111 11111010 + 1
等于 11111111 11111111 11111111 11111011
备注:1、从补码求原码的方法跟原码求补码是一样的 ,也可以通过完全逆运算来做,先减
1,再取反。
2、补码却规定0没有正负之分
所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。
转换为十六进制:0xFFFFFFFB。
三、再举一例
我们来看整数-1在计算机中如何表示。假设这也是一个int类型,那么:
1、先取-1的原码:10000000 00000000 00000000 00000001
2、得反码: 11111111 11111111 11111111 11111110(除符号位按位取反)
3、得补码: 11111111 11111111 11111111 11111111
可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF
四、主要知识点:
正数的反码和补码都与原码相同。
负数的反码为对该数的原码除符号位外各位取反。
负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1
源码:优点在于换算简单 缺点在于两个零 加减法需要独立运算
反码:优点在于表示清晰 缺点在于两个零 加减法同样需要独立运算
补码:优点在于一个零 范围大 减法可以转为加法 缺点在于理解困难
下面是书上原文:
原码表示法规定:用符号位和数值表示带符号数,正数的符号位用“0”表示,负数的符号位用“1”表示,数值部分用二进制形式表示。
反码表示法规定:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。 补码表示法规定:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
正零和负零的补码相同,[+0]补=[-0]补=0000 0000B
五、特殊情况-128
1000 0000,那么,它的原码是什么呢?从补码求原码的方法跟原码求补码是一样的。先保留符号位其它求反: 1111 1111, 再加1,11000 0000, 超过了8位了。对,用8位数的原码在这里已经无法表示了。
那么,回到原码处, 它的原码也是 1000 0000(超出的自动丢失),1000 0000 在原码表示什么呢? -0, 但补码却规定0没有正负之分。
转换一下思路,看看计算机里,是怎么运算的: 对于负数,先取绝对值,然后求反,加一 -128 -> 128 -> 1000 0000 -> 0111 1111 -> 1000 0000
现在明确了吧
所以, 8位有符号的整数取值范围的补码表示
1000 0000 到 0000 0000, 再到 0111 1111
即 -128 到 0, 再到 127
最终 -128 ~ +127
永远记住:程序里的加减法对 二进制是永远有效的。但是并不一定适合于真实世界。
byte m = -128;
byte q = 1;
byte p = (byte)(m - q); //这一步其实编译器会报错,其实是发现越界了,我们强行转化为byte就可以看出结果。
System.out.println( p); p的结果为:127
正在阅读:
二进制中正负数表示和判断05-14
2019四川省事业单位考试题及答案:公共基础知识(12.19)03-24
5.乐清市交流稿01-20
南京大学新闻传播学院考研参考书及复习资料信息:新闻传播学的“综合魅力”06-02
发生在家里的一件事作文02-05
3.5 线性方程组有解判别定理08-26
国家建筑标准设计名称及编号表04-19
大学英语四级考试快速阅读理解技巧新04-07
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 中正
- 负数
- 二进制
- 判断
- 表示
- 初中几何辅助线大全
- 糖尿病周围神经病变的临床神经电生理研究进展
- 美国麻省理工学院
- 发动机活塞连杆组
- 电力系统安全稳定控制技术概述
- 竹笋深加工利用技术现状及趋势
- BIOS设置图解教程1
- 有杀气童话橙装获取途径攻略 平民玩家也可以拥有橙装
- 植物模拟微重力效应研究进展
- 1第一章 汽车发动机工作原理和总体构造及电控系统
- 论中国为什么在20世纪50年代选择了社会主义道路]
- (完整)【高中数学必修2测试题及答案(2),推荐文档
- 眼镜验光员职业资格考试题及答案
- 小学阶段语文划分段落层次、概括段意专项练习(附答案)
- 班会:实习就业,你准备好了吗?
- 有关保护环境的倡议书四篇.doc
- 关于hpux换镜像硬盘的方法
- 判断推理(4)——逻辑判断参考答案
- 公司内部沟通会议制度
- 肖临骏:天下第二泉