精华内容
下载资源
问答
  • JAVA byte赋值的问题

    万次阅读 2016-09-10 18:14:22
    这两天利用java进行消息编解码的时候,总是碰到一个问题,需要给byte赋值. 如 需要将第一位地址的值 aa赋给一个变量,就很是比较麻烦。今天写了一个,记录下来 public static byte generateByte(String s) { ...

    这两天利用java进行消息编解码的时候,总是碰到一个问题,需要给byte赋值.

    这里写图片描述
    需要将第一位地址的值 aa赋给一个变量,就很是比较麻烦。今天写了一个,记录下来

        public static  byte generateByte(String s) {
    
            byte tmp = 0;
            char[] arr = s.toCharArray();
            if(arr.length > 2){
                return tmp;
            }
            int t0 = Integer.parseInt(Character.toString(arr[0]), 16);
            int t1 = Integer.parseInt(Character.toString(arr[1]), 16);
            byte tmp0 = (byte)t0;
            byte tmp1 = (byte)t1;
            tmp = (byte) (tmp0 << 4);
            tmp = (byte) (tmp | tmp1);
            return tmp;
        }

    byte数组打印代码

        /**
         * 
         * @Title: getHexByte 
         * @Description: 将二进制码流变成可打印的string类型
         * @param b : 需要打印的码流
         * @param start: 打印的开始点
         * @param length:打印长度
         * @return
         * @return: StringBuilder
         */
        public static StringBuilder getHexByte(byte[] b,int start, int length){
            int t = 0;
            StringBuilder sb = new StringBuilder();
            for (int i = start; i < start + length; i++) {
    
                if(i > 2 && b[i-1] == 'U' && b[i-2] == 'U'){
                    break;
                }
                String hex = Integer.toHexString(b[i] & 0xFF);
                if (hex.length() == 1) {
                    hex = '0' + hex;
                }
                sb.append(" ").append(hex.toUpperCase());
    
                t++;
                if(t % 16 == 0){
                    sb.append("\n");
                }
            }
            sb.append("\n");
            return sb;  
        }
    
    展开全文
  • byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢? class DataTypeDemo7 { public static void main(String[] args) { ... //而130不范围内,所以报错。 //byte b = 130; ...

    byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?

    class DataTypeDemo7 {
        public static void main(String[] args) {
            //因为byte的范围是:-128到127。
            //而130不在此范围内,所以报错。
            //byte b = 130; 
    
            //我们可以使用强制类型转换
            byte b = (byte) 130;
    
            //结果是多少呢?
            System.out.println(b);
        }
    }
    
    分析过程:
        我们要想知道结果是什么,就应该知道是如何进行计算的。
        而我们又知道计算机中数据的运算都是补码进行的。
        而要得到补码,首先要计算出数据的二进制。
    
        A:获取130这个数据的二进制。
            00000000 00000000 00000000 10000010
            这是130的原码,也是反码,还是补码。
        B:做截取操作,截成byte类型的了。
            10000010 
            这个结果是补码。
        C:已知补码求原码。
                    符号位     数值位
            补码: 1           0000010
    
            反码: 1           0000001
    
            原码: 1           1111110
    

    */

    展开全文
  • 首先我们知道,当byte和int类型的数据进行运算,编译时会把byte的变量的值提升为int类型再进行...JVM没有直接操作byte的指令, 在Java虚拟机,对于大部分与数据类型相关的字节码指令,他们的操作码助记符中都有特...

    首先我们知道,当byte和int类型的数据进行运算,编译时会把byte的变量的值提升为int类型再进行运算,这是如果你将他们二者的结果赋值给int类型的变量的话,即使没有溢出也会导致报错在这里插入图片描述

    但是我们发现如果两个变量都是byte型的话,仍然会报错
    在这里插入图片描述
    原因可以从两个方面来解释.

    1. JVM中没有直接操作byte的指令, 在Java虚拟机中,对于大部分与数据类型相关的字节码指令,他们的操作码助记符中都有特殊的字符来表示专门为哪种数据类型服务。但是Java虚拟机的操作码长度只有一个字节,这就带来一个问题,如果每种与数据类型相关的指令都支持Java虚拟机运行时数据类型的话,显然一个字节就不够用了。 所以Java虚拟机规范中,这种特性"Not Orthogonal",并非每种数据类型和每一种操作都有对应的指令。 大部分的指令都没有支持byte、char、short,没有任何指令支持boolean类型。编译器在编译期或者运行期将byte和short类型的数据带符号扩展为相应的int类型数据,将boolean和char类型数据零位扩展为相应的int类型数据。与之类似的,**在处理byte、char、short和boolean类型的数组时,也会转换成对应的int类型的字节码指令来处理。**因此,大多数对于byte、char、short和boolean类型数据的操作,实际上都是使用相应的int类型作为运算类型的。

    2.变量的值不确定,在java中,变量的值只有在运行的时候才能被JVM知道, 在编译的时候是不确定的,所以两个变量相加后变量的值还是储存在变量中,这样编译器就没有办法判断这个值是否溢出,所以就会报错.

    这样的情况同样也适用于char和short,但是对int 以上的数据类型就么有影响.
    在这里插入图片描述在这里插入图片描述
    详细了解更多的java数据类型的赋值和转化方面的注意事项

    本贴参考:https://blog.csdn.net/ejiao1233/article/details/82292348
    《深入理解Java虚拟机:JVM高级特性与最佳实践》

    展开全文
  • Java类型转换之强制转换byte赋值超过127会发生什么? byte a = ( byte)130值为何是-126?byte存储超限,溢出? 问题所需的一些知识: 二进制的原码,反码,补码: * 原码 * 就是二进制定点表示法,即最高...

    Java类型转换之强制转换byte赋值超过127会发生什么?


    byte a = ( byte)130值为何是-126?byte存储超限,溢出?

    问题所需的一些知识:

    二进制中的原码,反码,补码:

    		* 原码
    			* 就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
    			* 通过一个字节,也就是8个二进制位表示+7和-7
    			* 0(符号位)  0000111				
    			* 1(符号位)	0000111
    		* 反码
    			* 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外
    			* 1(符号位)	0000111
    			* 1			1111000
    		* 补码
    			* 正数的补码与其原码相同;负数的补码是在其反码的末位加1。 
    			* 11111001
    

    问题解答:

    		130的补码:
    
    		‭00000000 00000000 00000000 10000010‬‬
    
    		强转后:
    		
    		补码: 100000010
    		反码: 100000001
    		原码: 11111110
    
    根据8421表:
    
    		计算:	 1	  1		1		1		1		1		1		0
    
    			     64	   	32		16		8		4		2		1
    
    
    0+2+4+8+16+32+64=126
    
    首位是1,为负数,故(byte)130为-126
    
    
                                                      ----------我的CSDN博客:HappyMouse丨贝贝
    
                                                                
                                                      ----------2/28/2019 8:52:26 PM 
    
    展开全文
  • 在Java中byte类型数据运算之前要转换成int类型数据。 比如: byte a=1; byte b=2; byte c; c=a+b; //这样是计算不出c,是错误的 c=a+1; //这样也是不能计算c的 c=64+1; //为什么这样就能计算c,Jav
  • 把一个整数常量(其值在byte类型的表数范围内)赋值byte类型变量,系统会把整数常量当做byte类型来处理还是当做int来处理 查了一些资料,一部分是直接当做byte类型处理,一部分说是当做int类型处理然后数据类型...
  • java中byte赋值时候的易错点
  • 咱们先来看一段很简单的Java代码 这段代码非常简单,没有任何技术含量。但是,如果我们把这段代码...我们知道,Java语言有4种整数类型,分别是byte、short、int和long。其中,Java编译器对byte和short类型的变...
  • 之前偶然看到有讨论这个问题,网上搜了半天,结果都不尽如人意,解释没有到位, 有的说bytebyte默认就是int,那为什么这么做呢? 这不是找麻烦么?这种奇怪的默认还有哪些?带来一些列疑问。。。。。。 有的说...
  • 在java中扩展赋值运算符,例如 byte b = 1; //编译成功 b +=1; byte bi = 1; //编译会报错 bi = bi+1; 所以可以看出来扩展赋值运算符自带有强转功能,数据类型不会改变
  • Java中变量赋值的问题

    2015-06-04 13:22:14
    一个变量作为类成员使用的时候,如果没有被初始化,java会为其分配默认值: ...如果一个方法定义一个变量,java不会给其分配默认值,就必须我们来给他初始化,否则将得到编译错误的提示; 所以一
  • 先引入一个例题: public calss Test{ public static void main... byte b1=1,b2=2,b3,b6; final byte b4=4,b5=5; b6=b4+b5; b3=b1+b2; System.out.println(b3+b6); } } 关于上述代码片段叙述...
  • 很早的时候由于工作需要,接触过一点 Java,于是有了这个坑,今天...我万万没有想到这么一个简单的操作, Java 有各种约束。 首先看看代码: // 方式 1 byte allBitsOne = 0xFF; // 方式2 byte allBitsOn...
  • java中byte与int的转换原理

    千次阅读 2019-01-22 22:45:47
    前些天遇到一个问题,byte[0] = "A3"(十六进制表示) 但是debug时显示的是 -93 ,而如果直接赋值给int的变量也是-93.当然大部分人都知道这是不能直接赋值的,需要以下面的这种方式将byte转换成int: int temp ...
  • 在java中byte类型的变量的运算方式

    千次阅读 2016-08-21 20:11:54
    截图,发现,当javabyte的b1和b2进行计算时,java自动把他们提升为int类型,计算过程,b1+b2计算后已经是int类型,赋值给b3时就报错,所以java编译器保存如下:
  • 今天跟同学同学Java时发现一个问题,知道结果后也是被惊到了。代码如下; public class demo{ public static void main(String[] args){ byte b = 45; double d = 45.45; b += d; System.out.println...
  • java中 byte相加会生成int

    千次阅读 2018-07-05 15:32:23
    最近刷题时看到了如下题目: public static void main(String[] args) { byte b1 = 1,b2=2,b3,b6; final byte b4=3,b5=4; b6=b4+b5; b3=b1+b2; System.out.println(b3+""+b6); }...
  • //错误 运算时会自动转换为int类型 而int类型的值不能赋值byte 需要强制类型转换  b=3+4;//正确 常量具有常量类型优化机制 可以直接识别为byte public class Variable_1{ public static void main...
  • Java中byte和short类型向加减问题

    千次阅读 2020-07-03 11:38:14
    public class Test { ... final byte b4 = 4,b5 = 6,b7; int b; //b3 = (b1 + b2);//编译出错 b3 = (byte)(b1 + b2); b3 = (b4+b5); //b3 = (b4+b1);//编译出错 //b7 = 128;//编译出错 b = (b1 + b
  • Java中byte相加的问题.

    万次阅读 2016-09-22 16:08:22
    代码片段:  ...byte b1=1,b2=2,b3,b6;  final byte b4=4,b5=6;  b6=b4+b5;  b3=(b1+b2);  System.out.println(b3+b6); 关于上面代码片段叙述正确的
  • 在java中,我们知道,一个整数默认为int类型,由此呢?我们引发出了一个问题? byte类型为什么赋值一个整数不会报错 下面我们来看一个例子: 同为byte类型的b1和b2的和却无法赋值给b3 b5如果赋值一个整数不会报错...
  • Javabyte类型详解

    千次阅读 多人点赞 2020-03-04 00:12:24
    bytejava的基本数据类型之一,计算机存储以字节为单位,8位比特(bit)组成一个字节。 为什么弄清楚byte这么重要呢?因为智能硬件的数据传输大部分协议都是按字节一位一位来解析的,对于字节的运算十分频繁,...
  • Java中byte和二进制梳理

    万次阅读 2017-11-24 16:07:21
    java的基本数据类型byte这种,byte存储整型数据,占据1个字节(8 bits),能够存储的数据范围是-128~+127。 Bytejava.lang的一个类,目的是为基本数据类型byte进行封装。封装有几种好处,比如:1. Byte可以...
  • java中byte和char

    2015-09-24 10:27:36
    byte字节类型是JAVA中最小的数据类型,它内存占8位,取值范围从-128到127, 赋值byte i = 127; 注:byte在赋值时,一旦超过127或小于-128,则会产生编译错误。 char字符类型内存占2个字节...
  • 在java中默认整型是int类型,int类型是4字节,32位。而byte类型是1字节,8位而java中的二进制都是采用补码形式存储:⑴一个数为正,则它的原码、反码、补码相同⑵一个数为负,则符号位为1,其余各位是对原码取反,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,552
精华内容 44,620
关键字:

在java中byte赋值范围

java 订阅