关于算术运算符的问题

destiny- freedom 2020-01-17 05:08:38
byte b=127;
System.out.println(b++);
System.out.println(++b);
输出的结果分别是127和-127.请问这是为什么?
...全文
530 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2020-02-14
  • 打赏
  • 举报
回复 1
引用 楼主 Liquor-和林 的回复:
byte b=127; System.out.println(b++); System.out.println(++b); 输出的结果分别是127和-127.请问这是为什么?
你要先理解二进制数原码,补码和反码。 在计算机中数字都是以补码形式保存的 ,正数的补码是本身,所以 127 二进制 原码,补码,反码都是01111111 b++ ,++原则先使用在做++运算 所以第一次打印的是127,打印完后b+1 计算机中都是用补码来进行加减运算的 01111111+00000001 二进制数变为 10000000 ,10000000是-128的补码, 第2次打印 ++原则 先做++后输出,10000000+00000001=10000001,得到10000001,记住计算机里运算时用的都是补码,打印时我们输出的是原码,所以我们还要求原码 负数补码转原码: 退1后,除符号位各位取反 10000001的原码 11111111,第一位为符号位 所以原码表示的是-127 这个都是基础知识,需要掌握。
一路梦途 2020-02-13
  • 打赏
  • 举报
回复
引用 楼主 Liquor-和林的回复:
byte b=127;
System.out.println(b++);
System.out.println(++b);
输出的结果分别是127和-127.请问这是为什么?
这个是溢出和 ++运算符的问题
菜鸟相印 2020-02-04
  • 打赏
  • 举报
回复
byte的取值范围要清楚就懂这一题了
zxqjava 2020-01-17
  • 打赏
  • 举报
回复
这个被称作溢出,你可以理解为一个圆,出发点和结束点是-128和+127,两个点无限接近,byte类型的所有值都不会跳出这个园
  • 打赏
  • 举报
回复
byte的储存范围是-128~127,超过部分是类似取余的操作,
「已注销」 2020-01-17
  • 打赏
  • 举报
回复
可以这么讲,但没有+1操作时127是不会被看做-128的
destiny- freedom 2020-01-17
  • 打赏
  • 举报
回复
引用 1 楼 與蘤舊縐的回复:
b++为+1前b的值,++b为+1后b的值 byte的范围为-128~127,当超过127之后,又会回到-128
也就是说,当b=127时,127已经变成了-128,然后再++b,就是-128+1,然后变成-127是吗?
「已注销」 2020-01-17
  • 打赏
  • 举报
回复
b++为+1前b的值,++b为+1后b的值 byte的范围为-128~127,当超过127之后,又会回到-128

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧