解决Java中的强制类型转换和二进制表示问题

1、Java中用补码形式表示

2、第一位正负位,1表示负,0表示正。

3、原码:一个数的二进制表示。

3的原码00000011   -3的 原码 100000114、反码:负数原码按位取反(符号位不变)。正数原码本身。

3的反码00000011   -3的反码111111005、补码:正数是原码本身。负数反码加1。

3的补码是00000011  -3的补码是11111101int占4个字节,32位

byte占1个字节,8位

所以强转时会截断。前24位

在内存中表示形式( 注意java中是以补码表示一个数,所以表示形式是补码,不是原码! ):

int a = 3 00000000 00000000 00000000 00000011 (强转byte时前面24个0被截断)
byte b = 3 00000011
int a = -3 11111111 11111111 11111111 11111101 (强转byte时前面24个1被截断)
byte b = -3 11111101

已知负数的补码,求负数:

补码-1=反码,反码按位取反=该负数绝对值

已知负数,求负数的补码:

1、负数原码除了符号位,按位取反(不含符号位),加1。

2、负数绝对值的补码(也就是原码),按位取反(含符号位),加1

例子:

java int 128转为byte,值:

128为正数,补码为10000000(前面24个0省略),变成byte,只剩下10000000(byte为1个字节),因为开头是1,所以为负数。即1个负数的补码是10000000。反码是01111111,原码是1000000。是128.因为是负数,所以是-128。

总结

以上所述是小编给大家介绍的解决Java中的强制类型转换和二进制表示问题,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

(0)

相关推荐

  • java中实现递归计算二进制表示中1的个数

    借助Java语言,运用递归算法计算整数N的二进制表示中1的个数 /*use the recursive algorithme to calculate * the number of "1" in the binary expression * of an Integer N. * Note:if N is an odd, then * the result is the result of N/2 plus 1. * And the program use the bit opera

  • Java中对null进行强制类型转换的方法

    今天很好奇,对null进行强转会不会抛错.做了如下测试得到的结果是,如果把null强转给对象,是不会抛异常的,本身对象是可以为null的.但是如果是基本类型,比如 int i = (Integer)obj的强转,其实内部会调用intvalue方法去赋值给基本类型,所以这时候是会报错的. 代码如下 Object obj = null; Integer s1 = (Integer)obj; 上面能正常执行,即把null赋值给一个对象或者强行类型转换赋值给对象都是没有问题的.如果s1是 int的基本类

  • 浅谈Java中强制类型转换的问题

    为了更好的理解我们先看下面的例子: package com.yonyou.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * 测试类 * @author 我们 * @创建日期 2016-5-31 */ public class Test{ public static void main(String[] args) { List<String> list=new Ar

  • 解决Java中的强制类型转换和二进制表示问题

    1.Java中用补码形式表示 2.第一位正负位,1表示负,0表示正. 3.原码:一个数的二进制表示. 3的原码00000011   -3的 原码 100000114.反码:负数原码按位取反(符号位不变).正数原码本身. 3的反码00000011   -3的反码111111005.补码:正数是原码本身.负数反码加1. 3的补码是00000011  -3的补码是11111101int占4个字节,32位 byte占1个字节,8位 所以强转时会截断.前24位 在内存中表示形式( 注意java中是以补码表

  • Java中的强制类型转换 大数转小数

    首先要明确一下转换规则:大数转小数,多出的高位部分会被截断.比如 int 占 4个byte(32 bit), byte占 1个byte(8bit), 那int 转 byte ,int 高位多出的那24个bit会被截断. 例1: int b = 233; // 正整数强转 System.out.println((byte)b); // 原码: 0000 0000 0000 0000 0000 0000 1110 1001 // 补码(内存):0000 0000 0000 0000 0000 000

  • 详解JavaScript中的强制类型转换

    avaScript 原语 JavaScript 建立在一系列基本单元之上.你应该对其中的一些已经很熟悉了,比如字符串和数字: var greet = "Hello"; var year = 89; 字符串和数字是该语言所谓"原语"的一部分.完整清单是: String Number Boolean Null Undefined Object Symbol (ES6中添加,此处不予介绍) 布尔值用来表示可能是真或假的值. null 是故意不去赋值,它通常被分配给一个变量

  • 解决Java中OutOfMemoryError的问题

    目前为止,我遇到使用Tomcat有三种情况:第一,使用Eclipse,在Eclipse中配置Tomcat.第二,直接在Tomcat中部署项目.第三将Tomcat安装为windows服务. 在这三种情况下,出现OutOfMemoryError.该怎么解决呢?这里我不得不提我被网上那些不负责任的文章害得很惨.各种设置内存的方法都试了,可就是不起作用.下面我说的这几种方法都是我亲自试验过的,没有问题. 第一种情况:  如图:我用红色框框出来的.其中Xms和Xmx是增加java虚拟机初始堆大小和最大堆大

  • JAVA中string数据类型转换详解

    在JAVA中string是final类,提供字符串不可以修改,string类型在项目中经常使用,下面给大家介绍比较常用的string数据类型转换: String数据类型转换成long.int.double.float.boolean.char等七种数据类型 复制代码 代码如下: * 数据类型转换 * @author Administrator * */ public class 数据类型转换 { public static void main(String[] args) { String c=

  • 完美解决Java中的线程安全问题

    给出一个问题,如下: 解决方案如下: public class Demo_5 { public static void main(String[] args) { //创建一个窗口 TicketWindow tw1=new TicketWindow(); //使用三个线程同时启动 Thread t1=new Thread(tw1); Thread t2=new Thread(tw1); Thread t3=new Thread(tw1); t1.start(); t2.start(); t3.s

  • Java中常用的类型转换(推荐)

    1.将字符串转换成整数(String--->int) 方法一: (1) int i = Integer.parseInt(String s); 其中(1)其实就是我们经常用到的将s转换为10进制得数,其实默认是调用了 int i =Integer.parseInt("123",10); (2) i = Integer.parseInt(String s,int radix); radix的范围是在2~36之间,超出范围会抛异常.其中s的长度也不能超出7,否则也会抛异常. 方法二:

  • JS在if中的强制类型转换方式

    众所周知,JS在很多情况下会进行强制类型转换,其中,最常见两种是: 1.使用非严格相等进行比较,对==左边的值进行类型转换 2.在if判断时,括号内的值进行类型转换,转化为布尔值 今天,我就来聊一聊JS在if中的强制类型转换. 其实,如果详细要讨论哪些值在if中强制转换为true,哪些值在if中强制转换为false,这很困难,因为,情况太多了.但是,我们可以轻松记住强制类型转换结果,为什么?因为,大多数情况下,都是转换为true,只有四种情况会转换为false.此时,我们只需要记住转换为fals

  • 解决Java中由于数据太大自动转换成科学计数法的问题

    1.java后台 (1)使用BigDecimal类 方式一:String str=new BigDecimal(num+"").toString(); 方式二:String str=new BigDecimal(num.toString()).toString(); (2)使用DecimalFormat类 //注意,这种方式是保留几位小数 String str=new DecimalFormat("0.00").format(num); 2.JSP页面 (1)使用j

  • 解决Java中SimpleDateFormat线程不安全的五种方案

    目录 1.什么是线程不安全? 线程不安全的代码 2.解决方案 ① 将SimpleDateFormat变为局部变量 ② 使用synchronized加锁 ③ 使用Lock加锁 ④ 使用ThreadLocal ⑤ 使用DateTimeFormatter 3.线程不安全原因分析 4.各方案优缺点总结 1.什么是线程不安全? 线程不安全也叫非线程安全,是指多线程执行中,程序的执行结果和预期的结果不符的情况就叫做线程不安全. 线程不安全的代码 SimpleDateFormat 就是一个典型的线程不安全事例

随机推荐