精华内容
下载资源
问答
  • 在java中byte赋值范围
    2022-01-04 20:38:06
    byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
        答:有问题的,因为byte数据类型的范围是在-128~127之间,而130超出了范围。
    public class DataTypeDemo5 {
        public static void main(String[] args) {
    //        byte b = 130;
    
            byte b = (byte)130;
            System.out.println(b);  // -126
            b = (byte)131;
            System.out.println(b);
    
            byte b1 = (byte)300;
            System.out.println(b1); // 44
        }
    }
    
    /*
            我们知道数据在计算机种运算的时候是采用补码的形式参数运算的,所以要知道130的补码
            而想要知道补码,就得知道反码,原码,所以得求出130的二进制的表示:
            130的二进制:10000010
            由于整数默认是int类型,所以扩大字节
            130的原码为:00000000 00000000 00000000 10000010
            又由于最高位是0,所以它的原码,反码,补码都一样
            130的补码:00000000 00000000 00000000 10000010
            做截取操作:10000010 这是补码
    
            已知补码,求原码:
                   符号位   数值位
            补码:    1     0000010
            反码:    1     0000001
            原码:    1     1111110
    
            最终结果为:11111110
            将它换算成十进制就是我们看到的结果:-126
    
    
    
     */

    更多相关内容
  • 自从JDK7更新之后,新增了二进制变量的表示,支持将整数类型用二进制来表示,用0b开头;...新手这个时候会遇到一个问题,为啥byte b=0b100_00001会报错(cannot convert from int to byte)而short b=0b100...

    自从JDK7更新之后,新增了二进制变量的表示,支持将整数类型用二进制来表示,用0b开头;

    例如: byte b= (byte) 0b1000_0001;

    short s = (short) 0b1000_0000_0000_0001;

    新手在这个时候会遇到一个问题,为啥byte b=0b100_00001会报错(cannot convert from int to byte)

    而short b=0b100_00001又不会呢?既然java底层默认0b100_00001是int类型,为什么short可以呢?

    有的人说是byte是字节数据类型,short是短整数据类型,个人认为不太准确。所以我们在做个试验:

    试验1:short b=0b100_00001;//正常赋值;

    short s=0b1000_0000_0000_0001;//系统报错(cannot convert from int to byte);

    这个结果出来想必大家都有些眉目了,在二进制中最高位被定义为符号位,byte共有8个比特位,我们给它

    0b0000_0001时,最高位0系统无法判断是 实际数值 还是 符号位数值 。如果我们加上(byte),则系统认为

    此时的0是符号位,可以赋值;如果没有加(byte),则认为是实际数值,然而byte类型只有8个比特位,无位置

    表示符号位,因此溢出报错。

    试验2:byte b=0b0000_0001;// 正常赋值

    byte b=0b1000_0000;//报错

    再次印证了上面的推理,默认最高位是实际数值,超出位宽报错。

    -----------------------------------------------------------------黄金分割线---------------------------------------------------------------------

    问题2:

    byte a=(byte)0b1111_1111+0b0000_0001;  ---> 0 //运行结果为0

    有人解释道0b0000_0001为int类型,而(byte)0b1111_1111为byte类型,运算时会转为int类型运算,即为:

    0000_0000_0000_0000_0000_0000_1111_1111

    +

    0000_0000_0000_0000_0000_0000_0000_0001

    ||

    0000_0000_0000_0000_0000_0001_0000_0000

    || 转为byte类型,直接截取后8位

    0000_0000  =  0

    那么又有人问了:

    int a=(byte)0b1111_1111+0b0000_0001; 0  //运行结果同样为0,为什么不是256

    按照上面的意思被赋值变量a属于int类型,既然是按照int类型运算,结果就不用转换了嘛,直接赋值不就行啦?

    我们在看几组试验:

    1 、  byte a=(byte)0b0000_0001+0b1111_1111; -->报错 //cannot convert from int to byte

    int a=(byte)0b0000_0001+0b1111_1111; -->256 正常赋值

    2 、   byte a=(byte)0b1111_1111+(byte)0b0000_0001; --> 0

    int a=(byte)0b1111_1111+(byte)0b0000_0001; --> 0

    3、    byte a=(byte)(0b1111_1111+0b0000_0001); --> 0

    int a=(byte)(0b1111_1111+0b0000_0001); --> 0

    4、    int a=0b1111_1111+0b0000_0001; --> 256

    第一组报错从第一个问题可以推出,0b1111_1111超出了等号左边的byte类型范围,所以才会报错。

    我们有三种推断:

    第一、如果是都转为byte类型进行运算,那会考虑到符号位,多余正溢出,超出位宽自然舍弃,相加结果应为0b1000_0000,结果应为-128才对

    显然结果不是这样的,因此这种推断错误;

    第二、如果是都转为int类型进行运算,然后把值赋值给等号左边,这种推论试验2中int a=0,说不通,因此这种推断错误;

    第三、运算按照java直接值得规则,数值类型进行算数运算时,所有参与算数运算的数都会自动转换为参与运算的最大类型,得到的值也是该类型

    我们一一验证补码运算的结果{(byte)0b1111_1111对应的原码为1000_0001即为-1,而0000_0001位1,相加结果为0},以上问题都可以推理出来,

    因此,第三种推论是正确的,打完收工。

    展开全文
  • 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;  
        }
    
    展开全文
  • 主要介绍了java整数与byte数组的转换实现代码的相关资料,需要的朋友可以参考下
  • java中赋值

    千次阅读 2021-03-05 20:06:38
    java中赋值使用符号“=”。按照java编程思想的解释:它的意思是“取等号右边的值,把它复制给左边”。当然左边必须是一个明确的,已命名的变量。基本类型:int a=2;int b=3;a=b; //把b的值赋值给aSystem.out....

    java中的赋值使用符号“=”。

    按照java编程思想的解释:它的意思是“取等号右边的值,把它复制给左边”。

    当然左边必须是一个明确的,已命名的变量。

    基本类型:

    int a=2;

    int b=3;

    a=b; //把b的值赋值给a

    System.out.println("a="+a); //结果a=3

    a=4;

    System.out.println("a="+a); //结果a=4

    System.out.println("b="+b); //结果b=3,对a的操作不会影响b的值

    引用类型:

    class Person{

    int age;

    }

    public class Assignment{

    public static void main(String[] args){

    Person p1=new Person();

    p1.age=20;

    Person p2=new Person();

    p2.age=30;

    p1=p2;//将p2存储的Person对象内存地址赋值给p1,此时p1和p2变量存储的是相同的内存地址,指向同一对象

    p1.age=40;

    System.out.println(p2.age);//结果40;说明修改p1的值影响p2

    }

    }

    C&plus;&plus;与java中的赋值操作符

    #include using namespace std; class BankAccount{ private: double balance; public: B ...

    java中变量赋值的理解

    1.当赋值的值超出声明变量的范围时候,会报错! byte a =200 //会报错,因超出范围. byte a =(byte)200;//进行一个强制转换,就不会报错,不过会超出范围,超出部分会从头开 ...

    Java中子类对象赋值给父类变量

    1. 在Java中将一个字类对象赋值给父类变量是合法的,这也是实现多态(即方法的动态分派)的前提条件之一. 2. 在Java中父类赋值同样也适用于数组.可以将一个子类数组赋值给一个父类数组变量.但可能 ...

    Java中的volatile关键字为什么不是不具有原子性

    Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volat ...

    Java中参数传递时值传递的机制分析

    参数传递是什么?      在C的函数或是JAVA的方法中,向一个函数或方法内部传递一个参数,比如:   void fun( int num ){     num+=2 ; }   int a = 3 ...

    【Java EE 学习 70 下】【数据采集系统第二天】【Action中User注入】【设计调查页面】【Action中模型赋值问题】【编辑调查】

    一.Action中User注入问题 Action中可能会经常用到已经登陆的User对象,如果每次都从Session中拿会显得非常繁琐.可以想一种方法,当Action想要获取User对象的时候直接使用, ...

    &lbrack;转&rsqb;JAVA程序执行顺序,你了解了吗:JAVA中执行顺序,JAVA中赋值顺序

    本文主要介绍以下两块内容的执行顺序,熟悉的大虾可以直接飘过. 一.JAVA中执行顺序 静态块 块 构造器 父类构造器 二.JAVA中赋值顺序 静态块直接赋值 块直接赋值 父类继承的属性已赋值 静态变量 ...

    Java中long类型直接赋值大数字 注意事项

    在java中,我们都知道有八种基本数据类型:byte. char. short .int. long. float. double .boolean 下面列出以下四种数据类型及其取值范围: 本文主要讲 ...

    java中String类型变量的赋值问题

    第一节 String类型的方法参数 运行下面这段代码,其结果是什么? package com.test; public class Example { String str = new String( ...

    随机推荐

    jiajianhao

    #include int map[4][4]={ 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0}; int flag=0; int minci=9 ...

    C&plus;&plus;11:新式的字符串字面常量(String Literal)

    自C++11起,我们可以定义 raw string 字符串字面常量. Raw string 允许我们定义所见即所得的字符串字面常量,从而可以省下很多用来修饰特殊 字符的符号. Raw string 以 ...

    tableView的高度问题

    新建tableView 到一个普通的视图控制器的View 下,如果大小是全屏高 ,你的数据最下面显示不全,需要在设置高度时候,用屏幕高度-65 即可

    quartz&period;net 基于数据库的简单实现

    前面简单学习了通过XML配置或者内存指定的方式实现调度任务.但此用法实战用途较小,企业上多需要分布式集群的方式.quart团队也考虑到了这点,于是有了我们今天要学习的.基于数据库实现分布式. Name ...

    自己写的demo---声明异常同时处理异常,或者继续抛出异常

    package exception; public class exception { public static void main(String args[]) { /*** * 不能对类型 ex ...

    (转载)linux那点事儿(上)

    展开全文
  • java中byteByte详解

    千次阅读 2022-03-18 10:54:22
    Bytejava.lang的一个类,目的是为基本数据类型byte进行封装。 2:二者关系: Bytebyte的包装类,就如同Integer和int的关系, 一般情况包装类用于泛型或提供静态方法,用于基本类型或字符串之间转换,建议尽量...
  • java中变量赋值的理解

    2021-02-12 14:09:24
    1.当赋值的值超出声明变量的范围时候,会报错!byte a =200 //会报错,因超出范围byte a =(byte)200;//进行一个强制转换,就不会报错,不过会超出范围,超出部分会从头开始加,由于byte范围为-128~127,所以是-...
  • 目录InetAddress.getByAddress的用法引申解决方法 InetAddress.getByAddress的用法 科普: 我们现在使用的IPv4是用一个32位的二进制数来存储的,为了方便记忆,会将... 参数以网络字节顺序:地址的最高字节getAddres
  • 首先我们知道,当byte和int类型的数据进行运算,编译时会把byte的变量的值提升为int类型再进行...JVM没有直接操作byte的指令, 在Java虚拟机,对于大部分与数据类型相关的字节码指令,他们的操作码助记符中都有特...
  • 把一个整数常量(其值在byte类型的表数范围内)赋值byte类型变量,系统会把整数常量当做byte类型来处理还是当做int来处理 查了一些资料,一部分是直接当做byte类型处理,一部分说是当做int类型处理然后数据类型...
  • 1.准备工作import java.util.Arrays;/*** Byte[]与hex的相互转换* @explain* @author Marydon* @creationTime 2018年6月11日下午2:29:11* @version 1.0* @since* @email marydon20170307@163.com*/public class ...
  • 展开全部10默认为int,二进制(内存)表示为:00000000 00000000 0000000000001010;10占用4字节,而e68a843231313335323631343130323136353331333433636132byte只有1字节,按理来说是不能赋值的;在赋值时,...
  • Javabyte类型详解

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

    千次阅读 2021-02-12 09:04:28
    1、数组操作,可以使用等于(=)赋值注意:此时新数组只是指向原数组的存储空间,并没有重新申请新的空间。实例:public class ArrayTest{public static void main(String args[]){// 1int[] a=new int[4];a[0]=1;a...
  • <p>Java新手小白求教,以下代码推荐使用哪个,区别是什么 <p>byte[] bytes = new byte[0]; <p>byte[] bytes = null;</p>
  • 优质解答1....import java.util.Scanner;public class Application1 {/*** @param args*/public static void main(String[] args) {byte b = 0;byte a = 0;Scanner scan = new Scanner(System.in);Sy...
  • 主类和主方法 Test.java–是源文件,源文件必须与主类名(public class )保持一致,一个源文件只能有一个主类 ,主方法存在与主类。 Test.java 源文件 主类:public class Test 主方法 : public static void ...
  • 赋值运算符主要是这几种:=、+=、-=、*=、/=、%=,其它和二进制相关的内容这里就不详细解释了。赋值类的运算符包括基本赋值运算符(=)和扩展的赋值运算符(+=、-=、*=、/=、%=)。我们来看一段代码: public ...
  • byteBytebytejava的基本数据类型,存储整型数据,占据1个字节(8 bits),能够存储的数据范围是-128~+127。Bytejava.lang的一个类,目的是为基本数据类型byte进行封装。二者关系:Bytebyte的包装类,就如同...
  • [java] int转byte的细节

    2022-01-04 19:19:47
    int转byte细节
  • 也是想到了这个问题,然后google到了这个知乎的讨论,看完大家的...JVM规范所说,并没有说float,int,byte等占多少个字节,而是真正的有效位是多少。比如byte的有效位是1个字节,也就是-128到127。使用Java编程的...
  • java类型转换 byte转int

    千次阅读 2022-06-13 20:43:58
    java类型转换 byte转int
  • 探究Java中基本类型和部分包装类声明变量时不赋值的情况下java给他们的默认赋值当基本数据类型作为普通变量(八大基本类型: byte,char,boolean,short,int,long,float,double)只有开发人员对其进行初始化,java不会...
  • 之前偶然看到有讨论这个问题,网上搜了半天,结果都不尽如人意,解释没有到位, 有的说bytebyte默认就是int,那为什么这么做呢? 这不是找麻烦么?这种奇怪的默认还有哪些?带来一些列疑问。。。。。。 有的说...
  • Java赋值与初始化

    千次阅读 2021-03-16 19:21:06
    zhangleispirit@gmail.comJava的赋值和初始化包括很多容易被忽视的地方,此分类总结如下:1.和赋值相关:基本类型的赋值运算需要注意的是赋值时的类型转换问题,什么时候可以自动转换,什么时候需要强制类型转换是...
  • Java有关byte强制类型转换的问题:

    千次阅读 2020-03-19 15:04:30
    //错误 因为他们最终是要转向int类型 而int类型的值不能赋值byte b=3+4;//正确 因为他们都是常量 具有常量类型优化机制 可以直接识别为byte 哪句是编译失败的呢?为什么呢? 解析: 大部分的指令都没有支持byte、...
  • JAVA中为什么(byte)255=-1

    千次阅读 2021-03-02 15:26:56
    byte的取值范围 byte类型占8个字节除了第一位为符号位(“1”表示负“0”表示正)其余7个字节表示数值。 取值范围为111111111~011111111 可能会认为是-127到127 但是由于00000000和10000000表示0和-0,都表示0没有...
  • 在java中,我们都知道有八种基本数据类型:byte、 char、 short 、int、 long、 float、 double 、boolean下面列出以下四种数据类型及其取值范围:本文主要讲述,在java中写程序时,直接给long型赋值的问题:有...
  • 基本数据类型数组的3种赋值方式 第一种赋值方式 int[] arr = {1,2,3}; 第二种赋值方式 int[] arr2 = new int[]{1,2,3}; 第三种赋值方式 int[] arr3 = new int[3]; arr3[0] = 1; arr3[1] = 2; arr3[2] = 3;
  • 在java中,我们知道,一个整数默认为int类型,由此呢?我们引发出了一个问题? byte类型为什么赋值一个整数不会报错 下面我们来看一个例子: 同为byte类型的b1和b2的和却无法赋值给b3 b5如果赋值一个整数不会报错...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 141,536
精华内容 56,614
关键字:

在java中byte赋值范围

友情链接: libsmpp34-beta-1.8.1.tar.gz