一.问题来源

"为毛   -x=!x+1  ???

其中x为一任意int型正整数,左式表示取x的相反数后的二进制形式,右式表示先将x的二进制按位取反后再加一得到的二进制形式。

左右两个二进制相同"

假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:

00000000 00000000 00000000 00000101

5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。

现在想知道,-5在计算机中如何表示?

在计算机中,负数以原码的补码形式表达。

什么叫补码呢?这得从原码,反码说起。

二.源码,反码,补码

1.源码

原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。

比如 00000000 00000000 00000000 00000101 是 5的 原码。

10000000 00000000 00000000 00000101 是 -5的 原码。

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。

称:11111111 11111111 11111111 11111010 是 10000000 00000000 00000000 00000101 的反码。

反码是相互的,所以也可称:

10000000 00000000 00000000 00000101 和 11111111 11111111 11111111 11111010互为反码。

3.补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.

比如:10000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。

那么,补码为:

11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

所以,-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

java中负数的二进制表示

计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码,补码=反码+1。在二进制里,是用0和1来表示正负的,最高位为符号位,最高位为1代表负数,最高位为0代表正数。

以java中8位的byte为例,最大值为:0111 1111,最小值为1000 0001。

那么根据十进制的数字,我们如何转换为二进制呢?对于正数我们直接转换即可,对于负数则有一个过程。

以负数-5为例:

1.先将-5的绝对值转换成二进制,即为0000 0101;

2.然后求该二进制的反码,即为 1111 1010;

3.最后将反码加1,即为:1111 1011

所以Java中Integer.toBinaryString(-5)结果为11111111111111111111111111111011. Integer是32位(bit)的.

public classTest2 {publicTest2(){int i=-5;

System.out.println("i= "+i+" = "+Integer.toBinaryString(i)+"(B)");

}public static voidmain(String[] args){newTest2();

}

}

java 二进制 表示负数_正数负数的二进制表示相关推荐

  1. 接口请求,上传byte数组byte[]数据异常,负数变正数/负数变63

    接口请求,上传byte数组byte[]数据异常,负数变正数/负数变63 参考文章: (1)接口请求,上传byte数组byte[]数据异常,负数变正数/负数变63 (2)https://www.cnbl ...

  2. 无符号右移负数_关于负数的右移与无符号右移运算小结

    对于带符号右移,若为负数,则在存储时首位表示符号位,其值为1,表示该值是负数的移位,在移位过程中,高位补1,若符号位是0,表示是正数,在移位过程中高位补零,两者的前提是符号位保持不变: 对于负数的右移 ...

  3. java解析comtrade文件_一种COMTRADE二进制数据文件的快速解析方法与流程

    本发明涉及电子系统录波领域,更具体地,涉及一种COMTRADE二进制数据文件的快速解析方法. 背景技术: 近年来,随着电子技术的快速发展,电力系统暂态录波明显向高采样率.连续稳态记录和海量存储的趋势发 ...

  4. mysql 二进制 存储格式化_解析MYSQL BINLOG 二进制格式(2)--FORMAT_DESCRIPTION_EVENT

    原创:转载请说明出处谢谢! 上接 http://blog.itpub.net/7728585/viewspace-2133188/ 参考源: 1.源码log_event.h log_event.cc ...

  5. mysql 二进制日志查看_使用mysqlbinlog从二进制日志文件中查询mysql执行过的sql语句 (原)...

    前提 MySQL开启了binlog日志 操作 1. 查看MySQL是否开启binlog(进mysql操作) mysql> show variables like 'log_bin%'; 2. 查 ...

  6. mysql 二进制日志查看_使用mysqlbinlog查看二进制日志

    (一)mysqlbinlog工具介绍 binlog类型是二进制的,也就意味着我们没法直接打开看,MySQL提供了mysqlbinlog来查看二进制日志,该工具类似于Oracle的logminer.my ...

  7. mysql 二进制转字符串_将数据库的二进制转换为字符串

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. 负数与正数相乘怎么算_负数的加减乘除法是怎么算的?

    一.加法负数1+负数2=-(负数1+负数2)=负数负数+正数=符号取绝对值较大的加数的符号,数值取"用较大的绝对值减去较小的绝对值"的所得值二.减法负数1-负数2=负数1加上负数2 ...

  9. 计算机中正数和负数相加,负数减正数公式 正数与负数相加公式

    负数减正数的公式:负数-正数=-(正数+负数)=负数.负数减正数的结果为负数,保持符号不变,将两个数的绝对值相加即可.任何正数前加上负号便成了负数,负数减正数就相当于两个负数相加,因此符号不变,结果为 ...

最新文章

  1. 332. 重新安排行程(回溯算法)
  2. 深入理解Python生成器(Generator)
  3. srv.sys蓝屏解决补丁_Win10 补丁 KB4556799 导致部分用户蓝屏死机和网络问题
  4. 利用gitbash上传项目到github
  5. MySQL如何创建沙箱,沙箱环境搭建 - osc_y8w65yuq的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. oracle rman optimization,ORACLE rman设置
  7. 2019快手内容报告重磅发布:日活突破3亿 点赞量超3500亿
  8. dubbo + zookeeper 简介和部署
  9. NPAPI插件开发学习:NPAPI和NPRuntime的介绍
  10. 简单使用idea Spring Boot搭建项目
  11. STM32 BOOT模式设置
  12. 人脸识别系列(一):dlib安装和使用
  13. linux下如何查看cpu温度
  14. 技术面试最后反问面试官的问题合集
  15. 二十九-使用RealSenseD435进行ORBSLAM2实时三维重建
  16. Encoded password does not look like bcrypt
  17. 云南省昭通市领导一行莅临上海控安调研指导
  18. python生产式系统动物识别_在MES生产管理系统中,人脸识别技术以什么形式存在?...
  19. 计算机控制系统康波课后答案,计算机控制系统(康波)第8章部分习题参考解答[1]...
  20. 2018年中国游戏行业发展现状及发展前景分析

热门文章

  1. 月季黄金庆典如何养殖
  2. 大话设计模式(8)模板方法模式
  3. 后渗透——内网转发之借助WinRAR软件用命令行打包压缩网站源码
  4. 安卓虚拟键盘_逍遥安卓模拟器工作室版下载-逍遥安卓模拟器工作室版PC版下载v7.2.8...
  5. leetcode系列--9.回文数
  6. error: array type ‘char [x]‘ is not assignable
  7. 数美科技CEO唐会军受聘中国信通院互联网新技术新业务安全评估中心高级评估专家
  8. 关于coolpad8190Q连接计算机真机实测android程序
  9. ATmega16开发板仿真教程——前言
  10. 写入mysql_《从0到1学习Flink》—— Flink 读取 Kafka 数据批量写入到 MySQL