首页 > 编程语言 >java当中int类型数据转换为byte类型的数据处理过程

java当中int类型数据转换为byte类型的数据处理过程

时间:2023-06-23 13:44:32浏览次数:49  
标签:0000 int 1111 128 java byte 原码 1000

巨人的肩膀,感谢:https://blog.csdn.net/u013386606/article/details/80526486

大前提:目前来说所有数据在内存当中都是以补码的形式存在。

原码:原码(true form)是一种计算机中对数字的二进制定点表示方法。
     原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该
     位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。

反码:负数由原码取反获得,正数不变,符号位保持不变

补码:负数的补码由反码加1获得,正数的原码与补码相等

基础知识学习:

1.关于byte类型取值范围分析

在java当中byte类型只占一个字节,一个字节等于8位,其中最高位表示符号位0代表正数,1代表负数,

因此正数最大可以表示的正数为0111 1111(2)转化为10进制为127。正数最小可以表示0000 0000(2)

也就是0。

因为最高为代表符号位因此就出现了0000 0000(2)和1000 0000(2)也就是+0和-0,我们默认0

就是代表+0,没有-0这一说法,因此多出了1000 0000(2),1111 1111代表-127,1000 0000代表

-1,也就是从-1到-127都有数表示了,因此我们规定1000 0000(2)代表-128。

由上面分析我们可以确认byte的取值范围为[-128,127]。

2.关于int类型的取值范围分析

在java当中int类型占用4个字节,一个字节等于8位,所以总共32位,正数从0开始,负数从-1开始,

因此取值范围为:[-2^31, 2^31 - 1];

3.进入正题,int转换为byte类型过程

例子1:int类型1转换为byte类型

byte a = 1;
1的原码:
0000 0000   0000 0000   0000 0000    0000 0001
1的补码:
0000 0000   0000 0000   0000 0000    0000 0001
转换为byte丢掉高位3个字节得到:
0000 0001
最高位为0,即是正数,因此补码与原码一致,转为为10进制为1。

例子2:int类型128转换为byte类型

byte a = 128;
128的原码:
0000 0000   0000 0000   0000 0000    1000 0000
128的补码:
0000 0000   0000 0000   0000 0000    1000 0000
转换为byte丢掉高位3个字节得到:
1000 0000
最高位为1,即是负数,因此需要转换为原码:
反码:1111 1111
原码:1000 0000
因为我们约定-0代表-128,因此转换为10进制为-128

例子3:int类型129转换为byte类型

byte a = 129;
129的原码:
0000 0000   0000 0000   0000 0000    1000 0001
129的补码:
0000 0000   0000 0000   0000 0000    1000 0001
转换为byte丢掉高位3个字节得到:
1000 0001
最高位为1,即是负数,因此需要转换为原码:
反码:1111 1110
原码:1111 1111
因此转换为10进制为-127

例子4:int类型-128转换为byte类型

byte a = -128;
-128的原码:
1000 0000   0000 0000   0000 0000    1000 0000
-128的补码:
1111 1111   1111 1111   1111 1111    1000 0000
转换为byte丢掉高位3个字节得到:
1000 0000
最高位为1,即是负数,因此需要转换为原码:
反码:1111 1111
原码:1000 0000
因此转换为10进制为-128

例子5:int类型-129转换为byte类型

byte a = -129;
-129的原码:
1000 0000   0000 0000   0000 0000    1000 0001
-129的补码:
1111 1111   1111 1111   1111 1111    0111 1111
转换为byte丢掉高位3个字节得到:
0111 1111
最高位为0,即是正数,因此转换为10进制为127

4.关于n进制的数左移

一个n进制的数N左移m位后得到的数为:N * n^m

例如

十进制的4左移1位,4 * 10^1 = 40

二进制的4左移3位,也就是等于4 * 2^3 = 32

100<<3 变为 100000转为2进制为32

5.关于n进制的数右移

一个n进制的数N右移m位后得到的数为:N / (n^m)

例如

十进制的4右移1为,4/10 = 0

二进制的16右移3位,也就是等于16/(2^3) = 2

10000>>3 变为 10转为2进制为2

标签:0000,int,1111,128,java,byte,原码,1000
From: https://www.cnblogs.com/javaxubo/p/17499056.html

相关文章

  • Java基础之基本数据类型封装类的缓存
    巨人的肩膀:https://blog.csdn.net/hnjcxy/article/details/1237872091、Java中基本数据类型byte、short、char、int、long、float、double、boolean有对应的封装类型:Byte、Short、Character、Integer、long、Float、Double,Boolean其中Byte、Short、Character、Integer、Long、Bo......
  • java.util.concurrent.RejectedExecutionException 问题
    java.util.concurrent.RejectedExecutionException问题 http://qingfeng825.iteye.com/blog/1670511 http://blog.sina.com.cn/s/blog_6145ed81010143l8.html http://yaozhiqiang109.iteye.com/blog/1137579......
  • 关于byte的范围为什么是-128到127
    一基础知识在讲byte的范围前,先普及下在java中数据在计算机中的表示方法,数据在计算机中都是用二进制表示的,并且是用补码进行数据计算的。先引入原码,反码,补码:原码:原码是一种计算机中对数字的二进制定点表示方法,一般进制的最高位是符号位,1代表负号,0代表正号。原码举例:(对于十进制......
  • mysql的数据类型以及mysql中的int11是什么意思
    今天抽时间来讲一下mysql里的知识点,之前有不少人问过我,mysql中的int(11),这个11到底是啥意思?是11位的意思吗?你是否也想过这个问题,是否也有这个疑问?ok,今天就展开来讲一下,用通俗易懂的大白话来给你彻底搞明白一、跟你扯点二进制的小东西要讲清楚这个问题,我先来给大家科普一点计算......
  • 指数积分方法(Exponential Integration)求解ODE/DAE问题
    1.Matrixexponentialmethod(MEXP) 解如下形式的方程, 通过指数积分方法,获得从t到t+h时间的递进关系: 写为的形式如下:  其中,  2. Krylov方法近似其中的矩阵向量积(MEVP)可以通过Krylov方法近似计算: 其中Vm是的Krylov子空间的基。若C为奇异矩阵,则无法求......
  • Java打怪升级路线
    第一关:JavaSE阶段1、计算机基础2、java入门学习3、java基础语法4、流程控制和方法5、数组6、面向对象编程7、异常8、常用类9、集合框架10、IO11、多线程12、GUI编程13、网络编程14、注解与反射15、JUC编程16、JVM探究17、23种设计模式18、数据结构与算法19、正......
  • Java 泛型
    泛型GenricsJava泛型是在jdk5引入的新特性。它指定了接收参数的类型,避免了调用者乱传参,保留了代码的通用性和独特性。泛型类和泛型方法一般使用大写字母声明泛型,例如<T>类型擦除Typeerasure思考:能否插入一个字符串元素到一个整型数组中?答案:通过反射是可以的,原理就是类......
  • Java学习-集合篇
    集合什么是集合?有什么用?数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其他类型的数据。集合为什么说在开发中使用的较多?集合是一个容器,是一个载体,可以依次容纳多个对象。在实际的开发中,假设连接数据库,数据库当中有10条记录,那么假设把这10条记录查询出来,在java程......
  • IntStream的用法详解
    IntStream是一种特殊的Stream,用来提供对int类型数据进行相关的stream操作,下面我们一起来看下。1生成IntStream1.1IntStream.generate用来生成无限个数整数对应的stream,对于需要持续获取随机值的场景可以考虑使用这种方式。publicvoidtestGenerate(){Randomrand......
  • java线程的五种状态
    五种状态开始状态(new)就绪状态(runnable)运行状态(running)阻塞状态(blocked)结束状态(dead)状态变化1、线程刚创建时,是new状态2、线程调用了start()方法后,进入runnable状态,此时并未真正执行,需要和其他线程竞争cpu资源3、当该线程竞争到了cpu资源,进入running状态4、线程因为某种......