请教大家,关于byte类型的运算问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教大家,关于byte类型的运算问题相关的知识,希望对你有一定的参考价值。

  因为System.in.read()这个方法,要带参数sun只提供了read(byte[] b) ,也就是说只能用字节数组来做缓冲,符合计算机内存的存储机制以字节为单位存储数据,以int或char存储会增加开销(具体存储及效率涉及到一些系统结构知识)
  类System 的静态in字段返回 InputStream类型, InputStream它的read方法只有read(),read(byte[] b),read(byte[] b, int off, int len)三个方法。
  "0".getBytes(),这里0是个String类型,对其getBytes()返回的是字符串0的字节数组48,所以a为48;而c为byte类型,其值就为0,所以就有此输出。
参考技术A 因为在计算6!的时候,此时参与运算的fac的值是120,fac>Byte.MAX_VALUE(127)为false,所以6!=720仍然会输出,运算结束后,返回的fac是720>Byte.MAX_VALUE,输出结果为7!=值已经超出数据类型范围!!和异常信息。

关于Java运算中类型自动提升的问题

1.表达式中的自动类型提升:

表达式求值时,Java自动的隐含的将每个byte、short或char操作数提升为int类型,这些类型的包装类型也是可以的。

例如:short s1 = 1;

      s1 = s1 + 1;

s1+1运算中的操作数s1会被自动提升为int类型,s1+1运算结果会成为int类型,再赋值给short类型的s1时,编译器会报告需要强制转换类型的错误。需要改为short s1=1; s1=(short)(s1+1);结果就是short类型。

例如:short s1 = 1; 

      s1 += 1;

+=是java语言中的运算符,Java编译器会对它特殊处理进行正确的编译。

2.类型提升规则:

byte、short和char类型的值都被提升为int类型;

如果有一个操作数是long类型,就将整个表达式提升为long类型;

如果有一个操作数是float类型,就将整个表达式提升为float类型;

如果任何一个操作数为double类型,结果将为double类型。

例如:

byte b=1;

char c=‘a‘;

short s=1024;

int i=50;

float f=2.0f;

double d=.123;

double result = (f * b) + (i / c) - (d * s); 

f*b中,b被自动提升为float类型,该表达式结果是float类型;

i/c中,c被自动提升为int类型,该表达式结果是int类型;

d*s中,s被自动提升为doubl类型,该表达式结果是double类型;

最后,float+int-double,结果会被提升为double类型,double类型为最后结果result的类型。

3、测试一个int类型数据与float数据运算后,测试结果是什么类型

public class Test {
    public void test(float f) {
        System.out.println("float");
    }
 
    public void test(double d) {
        System.out.println("double");
    }
 
    public void test(int i) {
        System.out.println("int");
    }
 
    public static void main(String[] args) {
        Test t = new Test();
        int i = 10;
        float f = 10f;
        t.test(f * i);
    }
}

最后结果显示为float类型

 

以上是关于请教大家,关于byte类型的运算问题的主要内容,如果未能解决你的问题,请参考以下文章

关于Java运算中类型自动提升的问题

关于php 三元运算符的优先级问题。请教?

请教Python3 bytearray 的问题

请教STM32F4 的DSP库 FFT运算的问题.求高手指点

请教大家一个关于css水平导航栏的问题?

请教一个关于CMFCPropertyGridCtrl的问题