byte a=1;byte b=2;byte c=a+b;byte d=1+2; 请问第三句和第四句的计算机底层计算分别是怎么样的?

第三句是由a和b的值转换为4*8 32位的int类型计算的
那第四句为什么不是跟第三句一样计算而是由CPU8位计算?难道是因为第四句中1和2没有赋值给变量?java的变量的计算机制是什么?

第1个回答  2021-02-19

分析: 

d = 1 + 2; 1和2是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了1+2的结果并没有超过byte类型的取值范围,可以赋值给变量d,因此d=1+2 是正确的。

常量优化机制

有一些计算,非常简单,例如常量和常量的计算就非常简单,在编译阶段就可以把这些简单的运算计算完。

反之, c = a + b ,a和b是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定 a + b 的结果是什么,因此会将结果以int类型进行处理,所以int类型不能赋值给byte类型,因此编译失败。

第2个回答  2020-02-06
1+2是常量运算,在编译期发生常量折叠,编译器计算出结果3并用3替代。最终生成的字节码等价于byte d=3。
第3个回答  2020-02-07
1 + 2是字面常量,在编译期就完成计算了本回答被提问者和网友采纳

设有: int a=1,b=2,c=3,d=4,m=2,n=2; 执行(m=a>b)&&(n=c>
(m=a>b) 是赋值表达式,若a大于b则m得真,否则m得假。 a=1,b=2, a>b 为假,故 m=假。赋值表达式(m=a>b)为假。m=0。在逻辑与&&运算中,如果第一个操作数为假,则结果是假,后面的操作数不参与运算,本题中因为第一个操作数(m=a>b)为假,所以第二个操作数(n=c>d)不参加...

设有int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>b)之
(m=a>b) 是赋值表达式,若 a 大于 b 则 m 得真,否则m得假。 a=1,b=2, a>b 为假,故 m=假。赋值表达式(m=a>b)为假。m=0.(m=a>b)&&(n=c>b) 是 2个 赋值表达式 的 ”逻辑与“ 计算,当前面(m=a>b)为假时,{(m=a>b)&&(n=c>b) } 必得假, ...

...a=1;b=2;c=3; while(b<a<c) {t=a;a=b;b=t;c--;} printf( ” %d,%d...
b<a<c即(b<a)<c b<a即2<1,结果为假。。即false(0)然后b<a的结果和c进行比较.即0<3,结果为真,进到里面的处理不说了,结果变为a=2,b=1,c=2 再进行while里面的判断,同上判断,结果a=1,b=2,c=1 再进行while里面的判断,同上判断,结果a=2,b=1,c=0 ...

int a=1,b=2,c=2,t; while(a<b<c) {t=a;a=b;b=t;c--;} printf("%d,%d...
第二次循环a<b不成立为0,然后0<c成立,循环的条件成立 那么执行循环体后a=1,b=2,c=0;第三次循环a<b成立为1,然后1<c不成立,循环的条件不成立,退出循环,输出1 2 0

c语言中a=1;b=2;c=3; d=(a++,--b,b--,--a,--c,c--); 这个怎么做求A,B...
具体点啊:a=1;这是赋值表达式 对a 赋值为1 b=2;这是赋值表达式 对b 赋值为2 c=3;这是赋值表达式 对c 赋值为3 d=(a++,--b,b--,--a,--c,c--); 这个归根也是赋值表达式,是把右面的逗号表达式的值赋给d..逗号表达式:从左向右依次运算,整个逗号表达式的值为最右侧的值 所以,...

c语言 a=1; b=2; c=2; while(a<b<c){t=a; a=b; b=t; c
1<2成立为真,即1;在判断(a<b)<c,即1<2成立为真,即1;进入循环;第二次先判断a<b,2<1不成立为假,即0;在判断(a<b)<c,即0<1成立为真,即1;进入循环;第三次先判断a<b,1<2成立为真,即0;在判断(a<b)<c,即1<0成立为假,即0;不进入循环;最后答案:1,2,0 ...

int a=1,b=2,c=3,t;while (a<b<c) {t=a;a=b;b=t;c--;
while第一次循环后:a=2,b=1,c=2;第二次循环后:a=1,b=2,c=1;第三次循环条件不满足,跳出循环,输出:1,2,1

int a=1,b=2,c=3; printf("%d,%d,%d,%d\\n",a=b=c,a=b==c,a==(b=c...
2 倒数第二个参数 a==(b=c),运行完后,b的值变成3 3 倒数第三个参数 a=b==c 运行完后,由于b c相等,a的值变成1 由于这个参数是一个赋值语句,printf等到全部参数运算结束后,直接从变量a取值 4 倒数第四个参数 a=b=c 运行完后,a的值更新为3 由于这个参数是一个赋值语句,printf等到...

a=1,b=2,c=3;求表达式执行后a,b,c,d的值表达式d=--a||b++||c++
然后与后面进行||运算。b的值为2,先与(--a)进行||运算,再自加,由于b=2,所以(--a)||b=1。然后b自加变成3。这里就是||的规则了。无论多少项进行||运算,只要有一个是真的(非零),整个式子就是真的(非零)了。它后面的就不会参与运算。所以b++后面的c++就不会执行了。所以c...

网络中bitBytebpsBpsppsGbps的详细说明及换算方法
bit电脑记忆体中最小的单位,在二进位电脑系统中,每一bit 可以代表0 或 1 的数位讯号。Byte字节单位,一般表示存储介质大小的单位,一个B(常用大写的B来表示Byte)可代表一个字元(A~Z)、数字(0~9)、或符号(,.?!%&+-*\/),但中文字需要2个Byte。1 Byte = 8 bits1 KB = 1024 Bytes1 ...

相似回答