在Java/C++中正数和负数的存储方式

正数是以正码的形式存储
负数是以补码的形式存储

正码(正数使用)

正码就是一个数的真实值

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

00000000 00000000 00000000 00000101

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

反码(正码取反)

5的二进制表示为 00000000 00000000 00000000 00000101 ,取反得

00000000 00000000 00000000 00000101      5
-----------------------------------     ~5
11111111 11111111 11111111 11111010

补码(反码加1)

前面说到,5的反码为 11111111 11111111 11111111 11111010

 11111111 11111111 11111111 11111010         ~500000000 00000000 00000000 00000001           1-----------------------------------            +11111111 11111111 11111111 11111011           补码

在计算机里面,负数才使用补码的形式存储,那么我们举个例子 -1
先取1的正码重点,是1的正码):

00000000 00000000 00000000 00000001

-1的反码:

11111111 11111111 11111111 11111110

-1的补码(反码加1):

11111111 11111111 11111111 11111111

可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFFFF

为什么计算机负数要以补码的形式存储

在硬件底层,只有加法器,没有减法器,为什么呢?因为减法在计算机底层也是加法运算,原因就在于补码可以直接运算

 11111111 11111111 11111111 11111111     -1
+  11111111 11111111 11111111 11111011     -5
---------------------------------------11111111 11111111 11111111 11111010      -6的补码表示11111111 11111111 11111111 11111111      -1
+  00000000 00000000 00000000 00000101     5
---------------------------------------00000000 00000000 00000000 00000100      4的正码表示

Java中正负数二进制表示相关推荐

  1. java负数用什么类型定义_(转) Java中的负数及基本类型的转型详解

    (转) https://my.oschina.net/joymufeng/blog/139952 面这行代码的输出是什么? 下面两行代码的输出相同吗? 请尝试在Eclipse中运行上面的两个代码片段, ...

  2. 为什么对Java中的负数取绝对值结果不一定是正数?

    Java中对负数取绝对值结果不一定是正数的情况非常罕见,仅仅发生在int和long类型的最小负数上.这是因为在Java中,有符号整数使用补码(two's complement)表示法,导致某些情况下, ...

  3. java中正斜杠与反斜杠

    java中正斜杠与反斜杠 1.Java String类的replaceAll() 1.1 java 把反斜杠(\)替换成双斜杠(\\) 1.2 java 把反斜杠(\)替换成斜杠(/) 1.3 jav ...

  4. 二进制中正负数表示和判断

    二进制中第一位0代表正:1代表负我知道,但是给你一个二进制的数比如101 那么转化成十进制应该是多少? 5?  但不是说首位为1应该是负的吗??? 谁能给我讲讲这个首位什么时候作为符号,什么时候作为数 ...

  5. 关于JAVA中十进制转换二进制的小程序

    对于java中求二进制是将一个数分开成整数部分和小数部分,整数部分的按照除以2直到是0为止:小数部分是按照乘以2取整到0为止,对于特殊的小数就循环15次为止, 以下是代码: //十进制小数和整数的二进 ...

  6. 正负数二进制表示,正负数二进制移位运算、二进制源码、反码、补码

    源码 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. [+1] 的原码 = 0000 0001 [-1] 的原码 = 1000 0001 第一位是符号位. 因为第一位是符号位, ...

  7. FPGA中正负数和定点小数的表示方法

    在日常生活中,我们常常需要到正数与负数,比如南北两级气温常年为零度以下,这个时候我们就需要负数来表示温度.那么在FPGA工程里面也是这样,我们如果想要做温度监测工程,自然而然的就会需要到负数来表达零下 ...

  8. java中十进制转二进制转换函数

    十进制转成十六进制:  Integer.toHexString(int i)  十进制转成八进制  Integer.toOctalString(int i)  十进制转成二进制  Integer.to ...

  9. c 语言 正负数二进制表现_语言,表现力和设计,第1部分

    紧急设计的主要推动力之一是能够查看和收获惯用模式:在代码库中以非平凡的方式重复的过程,结构和习惯用法. 但是,有时这些模式对您隐藏. 在< 演进式体系结构和紧急设计>系列的第一期中 ,我描 ...

最新文章

  1. Nat. Mach. Intell. | 基于深度学习预测DNA甲基化位点
  2. dbms_java_java实现DBMS
  3. ADO之connection
  4. 每隔10秒钟打印一个“Helloworld”
  5. ABB 压包指令PackRawBytes 解包指令UnpackRawBytes
  6. StringBuffer类的常用方法
  7. ID3决策树预测的java实现
  8. java线程状态(六种五种)
  9. 13-1CPU控制器的功能和工作原理
  10. 软文管家发布平台_企业软文如何做好
  11. 21考研:你是为了什么考研?
  12. 31_ElasticSearch 修改IK分词器源码来基于mysql热更新词库
  13. 国产充电宝有哪些,国产充电宝哪个牌子的质量好?
  14. 搜索引擎使用的一些基本技巧
  15. 剖析Android开发未来的出路在哪里,这原因我服了
  16. Python:for循环语句
  17. SpringBoot仿牛客论坛项目实战
  18. 无垠PE组合工具箱纯净无广告的PE启动盘
  19. loopback具体作用
  20. 计算机软件检验 考试题,历年计算机软件水平程序员部分考试真题

热门文章

  1. 软件开发详细设计说明书(转载)
  2. ZT 王国维先生“人生三大境界”的具体含义是什么?
  3. 解决Windows10/11系统桌面背景或者IDE背景出现的莫名其妙的方框/格子
  4. linux切换用户时报错 bash: /home/book/.bashrc: 权限不够 bash-4.2$
  5. redis集群搭建及管理命令
  6. JAVA连接SQL2005
  7. 微信小程序开发项目源代码_SSM项目汽车租赁平台+后台管理系统
  8. 三步跳过wegame登录
  9. 单位根检验、协整检验和格兰杰因果关系检验三者之间的关系
  10. HDU5761 Rower Bo