java怎么看是补码_java怎么表示补码

A.java:7: 错误: 不兼容的类型: 从int转换到byte可能会有损失

byte b1 = 0xAA; ^ A.java:9: 错误: 不兼容的类型: 从int转换到short可能会有损失 short s1 = 0xAAAA; ^ 2 个错误

编译时候,进行检查,看赋值大小是否超过变量的类型所容纳的范围。

如果超过,报错:从int转换到byte可能会有损失,

如果没超过,编译通过

变量的类型 该变量类型所容纳的范围 ( MAX_VALUE 十进制)初始值( 10 进制)初始值( 16进制)byte1271700xAAshort32767436900xAAAAint214748364728633158990xAAAABBBBlong9223372036854775807122978481477578173090xAAAABBBBCCCCDDDDL

从表中看出,两处(byte b1 = 0xAA; 和 short s1=0xAAAA;) 没有通过编译的原因,都是因为初始赋的值超过变量的类型所容纳的范围。长型 变量 l 的初始化值 0xAAAABBBBCCCCDDDD 同样也超过了长型变量的最大值。只是因为数值的尾部加了一个L,避免了上述的检查。但后来调用方法 System.out.println(l);, 就会看到一个“垃圾”输出: -6148895925951734307。整型变量 i  的初始化,编译时也没有检查(可能是用了16进制形式的缘故?)。从表中看出,0xAAAABBBB 已经超出了int型变量的最大正整数值:2147483647。所以“初始化”之后,若调用方法 System.out.println(i);, 就会看到一个“垃圾”输出: -1431651397。如果用10进制形式初始化: int i = 2863315899; 同样逃不掉编译器的眼睛: A.java:6: 错误: 过大的整数: 2863315899

int i= 2863315899;

^

1 个错误

回复 @pinitianjie : 值得深思/详谈。

编译器不对超限的int和long进行检查,这个是为什么

Java 中都是有符号数。最高位表示正/符,其余位是有效位。最高位是1时,要以补码进行计算

贴一个JLS 中的英文:

An integer literal is of type long if it is suffixed with an ASCII letter L or l (ell); otherwise it is of type int.

int i = 0XAAAABBBB;

byte b = 0XA;

short s = 0XAAA; 正常

0XAA 十进制为170,大于byte的最大值127 0XAAAA 被认为是int值,且大于了short的最大值32767,不能赋值为short。

long 是64位且声明了该16进制数为long型,且最高位为1进行逆补码运算后结果为-6148895925951734307

这错误鼠标悬浮应该会告诉你吧

你连基本类型的最大值和最小值都不知道,建议

大佬请讲解一下。定义一个short类型字段,怎么set值给他

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值