我们知道数字在计算机中都是以二进制表示的,数字类型有:byte,short,int,long 我给计算机一个数字,计算机首先要确定他的类型,因为不同类型占有的空间是不一样的,     byte占有一个字节,总共8位,最高位是符号位,取值范围是-128-127     short占有两个字节     int占有4个字节     long占有8个字节 计算机中的二进制都是有符号位的二进制,所以对于一个byte类型的1111 1111,他是不能表示255的,首先我们看到最高位是1,他表示的是一个负数。 这里还要说明一个问题,虽然二进制的最高位表示符号位,1对应负,0对应正,但是绝对不是像咱们想的,负数就是在正数的基础上,把最高位改成就可以了。当然正数就是最高位是0,其他位按照咱们知道的计算即可。 那么负数到底是怎么表示的呢?为什么要这么不合我们常人的思维这样表示呢? 你给计算机一个负的十进制数,电脑中表示的思路是:先得到它对应的正值的二进制表示,然后取反,再加一,得到对应的负数的二进制表示 这也就是计算机中的补码表示法!!! 计算机中计算这样一个式子:8-1,8是正数,直接用它的原码(正数的原码,反码,补码都是一样的),-1是负数,用的它的补码,然后8+(-1),对应位相加即可。     这里如果按照都是byte类型来算的话:0000 1000 + 1111 1111((+1)0000 0001->(取反)1111 1110->(加一)1111 1111)= 0000 0111结果是7 上述过程,就是计算机计算加减法的实现方法。 对于如何由一个负数的二进制得到对应的十进制,是这样的:计算机得知这是一个负数的二进制,也就是最高位是1之后,先取反再加一,得到的是正值,去相反数也就是对应的负数的十进制表示。 至于具体为什么会出现反码和补码,网上相关的帖子很多,大家可以看一下,首先有一个-0和+0的问题,是通过反码补码解决的,这里谨希望大家不要想当然的认为负数在计算机中的表示就是把对应的正数的最高位改成1,例如-1的表示是1111 1111,而不是1000 0001,这就是一个活生生的例子。 为什么会想到分析这个问题,因为在写一个接受串口数据的程序的时候,遇到这个问题,具体如下: 接受到的数据流,Java是将其存储到byte类型的数组中的,自然就会把最高位当成符号位,而我对于数据的组织并不是把最高位当成符号位,因此需要将符号位计算进数值中。开始的思路是直接将得到的负数取相反数,然后再加上128,也就是像上面的错误理解,负数是在对应的正数的基础上把最高位变成1。 正确的做法应该是: 首先明确一下,因为你要让最高位表示数值,而byte类型的第八位肯定要表示符号的,所以,必然要将类型转换成空间更大的,这里转换成int类型,因为int类型的第八位不是符号位了。要让1-8位表示数值,而且肯定是正数,也就是除了1-8位其他的都是0,包括符号位,然而实际情况是:在将byte直接转化成int之后,低8位不变,其他位全部是1(例如上面提到的-1的int类型表示为1111 1111 1111 1111 1111 1111 1111 1111),很简单,因为int类型的负数的表示也是用补码的,必然也经过取反加一的过程,所以高的24位全部变成1,要让他们变成0,很简单,按位与上一个0xff(0000 0000 0000 0000 0000 0000 1111 1111)即可。 具体实现是int b = b1 & 0xff;

java负数转换二进制表示_Java中的负数的在计算机中的二进制表示,以及与十进制的相互转换...相关推荐

  1. 负317是几位数在计算机课中,计算机应用基础数据在计算机中的表示ppt课件

    .,数据在计算机中的表示,[email protected],.,数据在计算机中的表示,进位计数制及相互转换数值.字符和图形图像在计算机中的表示,.,数据单位,计算机中数据的常用单位有位.字节和字.1 ...

  2. 统计正数和负数的个数然后计算这些数的平均值_计算机中的二进制原来是这样:原码、反码和补码

    我是一个计算机专业大一的萌(lā)新(jī),刚刚开始接触二进制.很多朋友都知道计算机内部的数据通过二进制来储存和计算,但是一个小小二进制非要整一些花里胡哨(bushi)的东西,原码补码反码的一群东西 ...

  3. 计算机系统中常用的进制,计算机中常用 二进制 八进制 十进制 十六进制的特点...

    计算机中常用的计数制 用若干数位(由数码表示)的组合去表示一个数,各个数位之间是什么关系,即逢"几"进位,这就是进 位计数制的问题.也就是数制问题.数制,即进位计数制,是人们利用数 ...

  4. C语言中整型浮点型在计算机中的存储

    第一次写博客,遣词造句有点菜,算是一次简单梳理,慢慢学习人家的博客风格,随着学习的深入再做修改. 本次学习的是C语言在VS下的编译调试,对于初学者两说,首先说一下如何监控变量,以及监控变量在内存中的存 ...

  5. 22.25在计算机中如何储存,浮点数在计算机中存储方式

    C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= ...

  6. 计算机中的数制教学课程,计算机中的数制和码制教案.doc

    教案设计 姓名:包婷婷 学号:20090512124 班级:2009级 学院:计算机与信息科学 专业:计算机科学与技术(师范) 日期:2011年12月26日 科目:微型计算机基础 课名:计算机中的数制 ...

  7. 计算机编码中进制的区别,计算机中的进制和编码(转载)

    转载至 http://www.cnblogs.com/resn/p/5775378.html 古时候,人们是如何来传递消息的? 当年周幽王为博褒妃一笑,不顾众臣反对,竟数次无故点燃边关告急用的烽火台, ...

  8. 位是存储在计算机中的最小单位,在计算机中信息存储的最小单位是什么?

    比特(bit). 比特(BIT,binary system),计算机专业术语,是信息量单位,是由英文BIT音译而来.同时也是二进制数字中的位,信息量的度量单位,为信息量的最小单位. 在需要作出不同选择 ...

  9. 计算机中常用的数制英语,计算机中常用的几种数制

    用若干数位(由数码表示)的组合去表示一个数,各个数位之间是什么关系,即逢"几"进位,这就是进位计数制的问题.也就是数制问题.数制,即进位计数制,是人们利用数字符号按进位原则进行数据 ...

  10. 计算机中丢失UID.MR.DLL,计算机中丢失.dll如何解决 大师来详解

    如果计算机中缺少dll文件,我们打开软件或者是游戏的时候就会弹出缺少dll文件,这个时候怎么办呢.下面看看如何解决计算机缺少dll文件的问题, 工具/材料 DirectX Repair 操作方法 01 ...

最新文章

  1. Path Sum II leetcode java
  2. C#微信公众平台开发—高级群发接口
  3. en结尾的单词_以en结尾的英语单词
  4. 『安卓』安卓开发基础--基本控件
  5. 32岁了学python来的及吗_现在27岁学python来得及吗?
  6. c语言常用字符串处理函数6,【总结】C语言中常见的字符串处理函数
  7. php @touch,touch - [ php中文手册 ] - 在线原生手册 - php中文网
  8. eureka默认端口号是多少_从eureka报错中得知的默认配置
  9. 如何能够做好主动沟通
  10. iOS 对象数组生成jsonarray
  11. iOS——常用的手势总结
  12. SaaS 真实的案例, DRP
  13. dor服务器阵列修复,服务器raid5阵列故障排查及数据恢复方法篇
  14. 用Python可视化18万条《八佰》影评,看看观众怎么说?
  15. html5 发送邮件,【JS】使用 Emailjs 发送邮件
  16. Linux 30岁啦,这些历史你知道多少呢?
  17. 腾讯云服务器如何实现内网互联?
  18. python游戏联机_CoderZh首款Python联机对战游戏 - NancyTetris1.0倾情发布(一)
  19. 问中国开源社区 谁主沉浮?
  20. 三、BLDC矢量控制基础知识:三相线圈的电感矩阵

热门文章

  1. when is valid from and valid to filled in SAP IBASE buffer table
  2. IFRAME中嵌入C4C UI
  3. SAP CRM WebClient UI 某些icon图标不能正常显示X
  4. 如何查看header object和category 03的IBASE的relationship关系
  5. Mockito框架实现学习之when(dummy)
  6. 什么是SAP Commerce Cloud OCC
  7. xgboost 正则项_XGBoos算法背后的数学:尽可能简单地解释XGBoost算法背后的机制
  8. 关于LR录制时不能自动启动IE浏览器的解决方法
  9. 线段树-简单线段树模板
  10. html 输入框变红色,input输入框 输入错误时,点击注册按钮,输入框的边框变成红色,重新输入时,边框颜色恢复原来的,同时错误提示消失?...