但是 int a=2147483647+2147483647 这个也超出范围了啊,但为什么编译器不报,还能运行起来?
楼主很生气,后果没有分 哎呀,归根结底是数据超过了int的数据范围,就成负的了。
楼上各位都不厚道,对小学妹要好点.我来说说吧.假设变量的数据类型占用n个字节,数值超过其表示范围,直接就截取数值的最后n个字节赋值给变量. (其实是前n个字节,如果不知道我说什么,就姑且认为是最后的n个字节)对于int类型 int a = b; 相当于 int a = b & 0xFFFFFFFF; 对应的,要是 byte a = b就相当于 bye a = b & 0xff;
那我int a=999999999999999999;他怎么不变成别的 ?我这也溢出了,为什么不变负数或者范围之内的数?
1、是发生溢出了
2、a=99999999999999999肯定是编译不过去的
3、建议你看看java的类型定义那章,详细阅读下就明白了
MAX_VALUE:2147483647
我生气了!!!
int a=2147483647+2147483647
这个也超出范围了啊,但为什么编译器不报,还能运行起来?
哎呀,归根结底是数据超过了int的数据范围,就成负的了。
(其实是前n个字节,如果不知道我说什么,就姑且认为是最后的n个字节)对于int类型 int a = b; 相当于 int a = b & 0xFFFFFFFF;
对应的,要是 byte a = b就相当于 bye a = b & 0xff;