byte类型取值范围以及溢出详解

byte类型取值范围以及溢出详解例1:publicclasstest{ publicstaticvoidmain(String[]args){ bytea=127; a=(byte)(a+3); System.out.println(a); }}输出-126,为什么呢byte类型的取值范围是-128-127这个输出结果是由java编码方式决定的,Java中正数用原码

大家好,又见面了,我是你们的朋友全栈君。

例1:

public class test {
	public static void main(String[] args) {
		byte a = 127 ;
		a = (byte)(a+3) ;
		System.out.println(a);
	}
}


输出-126,为什么呢
byte类型的取值范围是-128-127
这个输出结果是由java编码方式决定的,Java中正数用原码表示,负数用补码表示,第一位是符号位。
对于127他的编码是:
0000 0000 0000 0000 0000 0000 0111 1111
加上3也就是130,他的编码是:
0000 0000 0000 0000 0000 0000 1000 0010
使用强制转型后,a的编码就变成:
1000 0010
因为java第一位为1的为负数,负数用补码表示,所以要显示原码,要取反加1:
这样就变成 0111 1110
这样就是126加上符号,结果就是-126


例2:

public class test {
	public static void main(String[] args) {
		short a = 128 ;
		byte b = (byte)a ;
		System.out.println(b);
	}
}

输出-128,为什么呢


同上:

a的编码是:

0000 0000 1000 0000

强制转型后变为1000 0000

因为java第一位为1的为负数,负数用补码表示,所以要显示原码,要取反加1:

还是1000 0000

这样就是128加上符号,结果就是-128


例3:

public class test {
	public static void main(String[] args) {
		byte a = (byte)(-129) ;
		System.out.println(a);
	}
}

输出127,为什么呢


同上:

a的补码是:

1000 0000 0000 0000 0000 0000 1000 0001

a的原码是:

0111 1111 1111 1111 1111 1111 0111 1111

强制转换,取后面8个字节,也就是

0111 1111

所以结果是127

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150558.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月18日 下午11:00
下一篇 2022年6月18日 下午11:00


相关推荐

  • MyCCL特征码定位原理学习[通俗易懂]

    MyCCL特征码定位原理学习[通俗易懂]这段时间学习WEB方面的技术,遇到了木马免杀特征码定位的问题,这里做一下学习笔记。这里对MyCCL的分块原理做一下探究对指定文件生成10个切块 对指定的木马进行切块后,文件列表是这样的。 注意这里是从E0作为切块的偏移量。也就是说从E0的位置开始逐个切块,E0之前的内容是保留的。这样做的目的是保留一些PE必须的头文件信息。我们来通过亲身的探究来解析一下MyCCL的切块区

    2025年8月15日
    5
  • LayoutParams理解和使用「建议收藏」

    LayoutParams理解和使用「建议收藏」LayoutParams理解和使用

    2026年2月8日
    3
  • 局域网arp断网攻击怎么解决_arp断网攻击连不上网

    局域网arp断网攻击怎么解决_arp断网攻击连不上网   关于局域网断网攻击,顾名思义,就是对局域网内某个IP或全部IP进行攻击,让局域网内某个IP或全部IP断网,这是不是很有趣。   原理:关于arp断网攻击是基于arp协议的缺陷,这其实是arp欺骗的时候配置错误引起的现象。就是以…

    2022年10月7日
    5
  • SpringMVC中url-pattern /和/*的区别「建议收藏」

    学习Spring的时候,在配置web.xml的时候,把url-pattern 配置成/*,启动项目后去访问自己的Controller总是报404.检查了很多发现资源是存在的,配置的地址也没有问题,为什么会出现404错误呢?最后发现是自己配置的 url-pattern 不对! 现整理一下: (1):在使用springmvc时,都会在web.xml中配置一个dispatchservlet,如下:

    2022年2月25日
    57
  • 谁有FlashFXP可用注册码

    谁有FlashFXP可用注册码 急用,谢了

    2022年7月26日
    7
  • MATLAB矩阵合并「建议收藏」

    MATLAB矩阵合并「建议收藏」两个或多个矩阵的拼接(合并)操作:学习链接用[]做拼接时,有三种连接符:逗号(,),空格,分号(;)。逗号(,)和空格等价,表示不换行,直接横向拼接,横向拼接要求两个矩阵行数相同;分号(;)表示换行后纵向拼接,纵向拼接要求两个拼接的矩阵的列数相同。代码展示:1.横向拼接:1%逗号和空格表示横向拼接2A=zeros(4,2)3B=ones(4,1)4C=[AB]A=00000000B=11

    2022年6月25日
    120

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号