学习过java的都知道,在java中,不是直观的表示负数,而是采用补码的形式表示负数。 这是为了硬件操作的方便,把减法也转换成加法来运算。 那补码是怎样表示的呢?为了得到补码,我们引入了反码。 对于正数来讲,它的反码补码都为本身,如果不明白为什么,我

学习过java的都知道,在java中,不是直观的表示负数,而是采用补码的形式表示负数。

这是为了硬件操作的方便,把减法也转换成加法来运算。

那补码是怎样表示的呢?为了得到补码,我们引入了反码。

对于正数来讲,它的反码补码都为本身,如果不明白为什么,我们可以这样理解:引入反码补码的原因就是为了解决减法的问题,换句话数就是解决java中负数的问题,正数不存在这些问题,所以它的反码补码就是它本身。在有符号的基本数据类型中,最高位0表示正数,最高位1表示负数。 对于负数来讲,它的反码就是除去符号位取反,然后加1就得到了它的补码。

这里举个简单的例子,一个byte型数据,它在计算机中占8位,-7可以表示为10000111,最高位的1代表负号,它的反码是除去符号位各位取反为11111000,然后加1得到补码11111001。

8的二进制表示为00001000,现在我们运算8 - 7,在计算机并不是用8减去7,而是用8 + (-7),也就是用00001000加上-7的补码11111001,两个有符号数相加,如果符号位相加有近位就删去符号位的进位,得到00000001,也就是1.

java中我们经常也会遇到不同数据类型的转换,这是最容易出错的地方。

首先我们了解一下什么是符号扩展,对于正数来讲,在前面补0; 负数时在前面补1。比如8位的二进制数10000111扩展为16位,我们在前面加上8个1,1111111110000111;如果是正数,则在前面补0。这样进行扩展后,符号和数值的大小都不变。

接下来我们我们看一下不同类型之间是怎样转换的,首先我们要知道这些基本类型各自占几位。 有符号型: byte = 8   int = 32   short = 16 long = 64   float = 32   double = 64   *boolean 只占一位,用0和1代表false和true。

无符号型: char =  16

1. byte型转为char型 因为byte是有符号类型,再转成char型时需要进行符号位扩展,如果是正数就在前面不上8个0, 如果是负数就在前面补上8个1。例如11111111(0xff)左边连续补上8个1结果是0xffff。因为char是无符号类型,所以0xffff表示的十进制数是65535。

2. char型转为int型 因为char是无符号类型,转换成int型时进行在前面补上16个0,用十进制表示结果为结果0x0000ffff,对应的十进制数是65535。

3. int型转为byte型 因为int是32位,而byte类型值只占8位,直接截取最后8位。例如-1的补码为0xffffffff,转换为byte型后为0xff,值为-1。

总结:如果最初的数值类型是有符号的,那么就执行符号扩展;如果是char类型,那么不管它要被转换成什么类型,都执行零扩展。还有另外一条规则也需要记住,如果目标类型的长度小于源类型的长度,则直接截取目标类型的长度。例如将int型转换成byte型,直接截取int型的右边8位。 下载地址 ?

java中负数_Java中负数以及类型转换问题相关推荐

  1. java 二进制 表示负数_java中的负数表示

    下面这行代码的输出是什么? 1 public static void main(String[] args) { 2 System.out.println(0xffffffff); 3 } 下面两行代 ...

  2. java取模负数_JAVA中取模的问题

    ## Java取模(%)运算 > [上篇文章](https://yebukong.com/article/1101070795486109697.html "上篇文章") 提 ...

  3. java 数据类型分为_JAVA中分为基本数据类型及引用数据类型

    byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...

  4. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  5. java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

  6. java 内部变量_java 中的内置数据类型

    1,  基本数据类型 Java是强类型语言, 对于每一种数据都定义了类型,基本数据类型分为数值型,字符型,布尔型.数值型又分为了整型和浮点型. 整型又分为byte, int, short long. ...

  7. java中面向对象_java中的面向对象

    首先需要了解什么时面向对象呢? 面向: 基本义:面对,朝向 引申义:注重, 关注 对象: 世间一切的事物(万物皆对象) 面向对象思想: 面向对象思想就是把一个关注点放在一件事或一个活动中涉及到的人或事 ...

  8. java 判断类型_Java中类型判断的几种方式

    在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式.拉勾IT课小编为大家提供java种类型判断方式. instanceof instanceof是Ja ...

  9. java list对象_JAVA中list

    Java 查找 List 中的最大值.最小值 Java 查找 List 中的最大值.最小值 java> List list = new ArrayList(); java.util.List l ...

  10. java判断类型_Java中类型判断的几种方式

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

最新文章

  1. 用Machin公式计算圆周率的源程序
  2. 子module 引入so库,aar文件配置
  3. tf.nn.sparse_softmax_cross_entropy_with_logits()与tf.nn.softmax_cross_entropy_with_logits的差别
  4. python全栈开发-json和pickle模块(数据的序列化)
  5. 技术分享|单元测试推广与实战-在全新的DDD架构上进行单元测试
  6. react特性-声明式编程
  7. hbuilder设置html浏览器打开,HBuilder X如何配置浏览器操作配置方法
  8. AHOI2018训练日程(3.10~4.12)
  9. 深入理解JavaScript系列
  10. linux删除一个目录下的所有空文件
  11. 计算机基础知识上机操作excer,excel上机操作题及答案
  12. Android 模拟器安装及使用教程
  13. Excel表格的35招必学秘技[配图]
  14. python提取文件指定列_python 提取文件指定列的方法示例
  15. Php打印连续纸,针式打印机打印241*297MM连续纸时总按A4纸长度多走一部分白纸?
  16. android微信支付插件,Android通过Apk插件调起微信支付
  17. 找到组织了---perftest工作室 TIB工作室
  18. linux服务器安全与配置,Linux系统服务器安装后的安全配置
  19. 正则表达式项目,批量修改文件
  20. python : turtle 画一朵花

热门文章

  1. ribbon的注解 @LoadBalanced 报错 No instances available for [IP]
  2. 怎么给边框添加图片 css3,用CSS3轻松实现图片边框
  3. javascript 代码转换为 typescript 代码
  4. 工作缺点和不足及措施_个人工作存在的不足和改进措施_个人工作存在问题和整改方案...
  5. 使用Xcode真机调试时没有任何问题,但是当打包成ipa文件安装时,有接口访问不到后台信息
  6. Windows系统下GIT生成密钥和添加密钥git
  7. SpringBoot集成MyBatis操作Mysql(极速体验版)
  8. macOS:实现 声音内录 不用其它App
  9. linux nvidia显卡驱动安装教程,LINUX的NVIDIA显卡驱动安装
  10. 结对开发项目--石家庄地铁web版