s=s+1与s+=1在计算机内部执行时的过程有什么区别

2025-03-10 05:47:51
推荐回答(3个)
回答1:

隐式类型转换可以从小到大自动转,即byte->short->int->long如果反过来会丢失精度,必须进行显示类型转换
而s+=1的意思与s = s+1不同,s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换
所以将一个int类型赋给short就会出错,而s+=1不同由于是+=操作符,在解析时候s+=1就等价于s = (short)(s+1),翻番来讲就是
s+=1 <=> s = (s的类型)(s+1)

希望对你有帮助!

回答2:

  1. 隐式类型转换可以从小到大自动转,即byte->short->int->long如果反过来会丢失精度。

  2. 必须进行显示类型转换而s+=1的意思与s = s+1不同,s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换。

  3. 将一个int类型赋给short就会出错,而s+=1不同由于是+=操作符,在解析时候s+=1就等价于s = (short)(s+1),翻番来讲就是  s+=1 <=> s =  (s的类型)(s+1)

数据类型不同了,s = s + 1,这里的s会转换为int类型,这样会产生精度丢失的问题所以要强制转换为short类型,s = (short)(s + 1)。s += 1数据类型还是short。转换了2个就没区别了。

(*s++) 解引用得到s指向位置的值,将该值作为表达式的结果,然后s指针往后偏移
s++ 就s指针往后偏移
*s++ 解引用得到s指向位置的值,将该值作为表达式的结果,然后s指针往后偏移。和第一个一样。

(*s)++ 解引用得到s指向位置的值,然后将该值做自加,新值作为表达式的结果值

前面3处的++都是作用在指针上,也就是地址上
最后1个++是作用在指针指向地址上的数值上

回答3:

这是简写,没有区别