以一个字节为例

1、无符号位,一个字节可以存放0~255共256个数字;有符号位存放-128~127共256个数字;

2、无符号全都表示为正数;有符号位则首位表示正负数,正数首位为0,负数首位为1(因此在判断一个数为正还是负时会先看首位,如果为正直接算,如果为负还要经过求反码、源码)

以下以默认的有符号位示例

3、首先,要知道计算机中正数用源码表示,负数用其正数的补码表示;补码为源码的反码加一(如-1即为1的反码加一表示)

  1:0000 0001

   -1:1111 1111

  从1到-1的计算过程:0000 0001  取反码为  1111 1110

             1111 1110   +1为补码  1111 1111

  因此-1表示为 1111 1111

4、如果给你一个负数,要求你用二进制表示;

  第一:先判断这个负数是否溢出(不管正负都要判断),如果溢出就不能表示,如果要强制转换就会造成数据不一致,那么原始数据就会丢失;

     如果不溢出,就下一步;

  第二:先用二进制表示出其对应的绝对值(正数)的二进制源码;

  第三:根据源码求反码,源码取反(~源码);

  第四:根据反码求补码表示负数,反码+1;

5、如果给你一个负数的二进制,求该二进制表示的负数为几;

  第一:先求补码,该负数的二进制-1;

  第二:根据补码求源码,补码取反(~补码);

  第三:将源码算出代表几;

关于牛客网题目的理解(正确答案为 B)

前言:不管什么都是按照上诉4、5计算;

  • 比如4,当正数溢出时,他还是会把源码先(扩容后:如原本只装1个字节,但是装不下就扩用2个字节表示)表示出来,然后从低位截取再判断正负再进行计算;
  • 当负数溢出时,他还是会将源码表示出来,然后根据规则算出补码,最后截取后存储。由于截取后数值就变啦,因此所表示的就不是原来的数了,至于表示几自己根据规则再算回去,有时甚至会变为正数就是这个原因;

因此这道题我是这么做的:

因为a为short类型,一共16位,表示128为:0000 0000 1000 0000

b为byte类型,一共8位,将a强制转换后为:1000 0000

为什么1000 0000表示-128呢,我自己的理解是:

  1. 首先首位为1,则表示为负数 ,负数用补码表示,所以1000 0000为补码
  2. 补码-1为反码,即0111 1111
  3. 反码取反,为1000 0000
  4. 1000 0000表示的的正值为27=128(这样既符合正负数表示方法,数学数值上也说得通,包括16位的10000000 00000000表示-32768等等也是这个道理);所以1000 0000表示-128

总结:因此我认为通过负数二进制求其表示的数时,最后得出源码后,应该是求源码表示的正值;而1000 0000在byte中比较特别,因为它的补码与源码相同,所以最后得出源码时会比较懵逼,但如果记住这时该求正值就行了;以后自己按照这个计算方法计算便可以,方便好记

转载于:https://www.cnblogs.com/qiong2017/p/7666156.html

关于源码,反码,补码(正数--负数)---------(-128)自己的理解相关推荐

  1. 二进制 正数 负数 源码反码补码

     二进制的正负数 . HEX (十六进制) EA                        EA Oct(十进制)      有符号                   无符号 -22       ...

  2. 源码 反码 补码详解(为什么计算机存储数值为补码形式?)

    一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放 ...

  3. 源码/反码/补码 (转)

    大家都知道数据在计算机中都是按字节来储存了,1个字节等于8位(1Byte=8bit),而计算机只能识别0和1这两个数,所以根据排列,1个字节能代表256种不同的信息,即28(0和1两种可能,8位排列) ...

  4. java数字取反_java中源码反码补码与取反的理解

    数字在计算机里是按照二进制来表示的. 箭头朝哪边就是朝哪边移动 补码,反码,和源码 负数原码转化为补码:符号位不变,数值位按位取反,末尾加一. 负数补码转化为原码:符号位不变,数值位按位取反,末尾加1 ...

  5. python二进制反码例题_python中的进制转换和原码,反码,补码

    python中的进制转换和原码,反码,补码 计算机文件大小单位 b = bit 位(比特) B = Byte 字节 1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b 1KB ...

  6. 2.2.1 定点数的表示 原码 反码 补码 移码

    没有未来的未来不是我想要的未来 o(╥﹏╥)o (つД`)(ノへ ̄.)哭了 学习的是定点数的表示,那我们首先来认识一下什么叫定点数与定点数相对应的另一个概念叫做浮点数所谓定点数就是指小数点的位置固定不 ...

  7. 10.原码 反码 补码

    +7的原码:0000 0111 -7的原码:1000 0111   第一位0代表正数,1代表负数,第一位为符号位 +7的反码:0000 0111 正数反码和原码一样 -7的反码:1111 1000   ...

  8. 补码原码转换c语言代码,c/c++原码反码补码原理 以及进制转换

    1首先了解 低字节位 和高字节位 看图 2字节在内存的排列方式//int num = 010; //0开头代表 8禁止 //("%d",num); //所以打印的是8 int nu ...

  9. 原码反码补码之间运算转换

    1. 正数的原码=反码=补码 2. 负数的反码=在其原码的基础上, 符号位不变,其余各个位取反 负数的补码=在反码的基础上+1 负数的补码=在原码的基础上, 符号位不变, 其余各位取反, 最后末位+ ...

  10. 浅谈 -128的原码 反码 补码

    以java中byte表示:2字节 8位,-128 首先首位1表示负数,128的正数为1000 0000(其实是-128),然后拼接为1 1000 0000,大于8位,则取低8位,为1000 0000, ...

最新文章

  1. javaScript事件(二)事件处理程序
  2. Wmap5 测试80端口 Your port 80 is actually used by :Server: Microsoft-HTTPAPI/2.0
  3. Web 端的下一代三维图形
  4. PostgreSQL failed IANA tz database BUG修复
  5. linux上很方便的上传下载文件工具rz和sz使用介绍
  6. [禅悟人生]尊严非席, 不可卷起
  7. 如何在golang http服务端程序中读取2次Request Body?(转)
  8. dubbo+rabbitmq+hystrix实现服务的高可用
  9. 正则匹配字符串有则替换无则添加;用正则实现添加和替换字符串,原字符串中包含某字段就替换(覆盖),不包含某字段就添加!
  10. vs配置opencv
  11. 企业销售管理现状分析与解决思路(转)
  12. Apache环境.htaccess伪静态301跳转(www与不带www)
  13. [转载]Web前端开发工程师编程能力飞升之路
  14. docker mysql 备份_docker mysql数据备份xtrabackup
  15. java utf8 gbk 乱码,java UTF-8转GBK不乱码
  16. 如果小米开放购买会怎么样?
  17. Rockchip CAN 总线
  18. 开源软件负载均衡方案比较
  19. ​计算机视觉传感器系统
  20. CentOS安装配置tomcat

热门文章

  1. Katy Perry - E.T.
  2. 使用Amalgamate将C/C++项目合并成一个.h/.c[pp]文件
  3. html css 知识回顾2
  4. css隐藏元素的几种方法与区别
  5. CC++初学者编程教程(8) VS2013配置编程助手与QT
  6. 【虚拟主机篇】asp页面实现301重定向方法
  7. linq 解决winForm中控件CheckedListBox操作的问题。(转载)
  8. 网页爬虫的设计与实现(Java版)
  9. 按窗口文件php代码,在Windows命令行窗口中输入并运行PHP代码片段(不需要php文件)的方法...
  10. matlab 次坐标轴 标注,matlab标注坐标轴