首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 7二进制文字澄清

Java 7二进制文字澄清
EN

Stack Overflow用户
提问于 2012-01-08 12:49:09
回答 5查看 2.1K关注 0票数 2

如您所知,二进制文本是Java 7中引入的一个新特性:

代码语言:javascript
复制
int x = 0b1011;
System.out.println(x); // prints 11 as expected

但是,当我试图从文字二进制中得到最大数字时,我得到了-1

代码语言:javascript
复制
int x = 0b11111111111111111111111111111111;
System.out.println(x); // prints -1 !!!

详细信息:

代码语言:javascript
复制
System.out.println(Integer.MAX_VALUE);
System.out.println(0b1111111111111111111111111111111); // 31 bits

/* Both print 2147483647 */

/************************************************************************************/

System.out.println(Integer.MIN_VALUE);
System.out.println(0b10000000000000000000000000000000); // 32 bits (increment by 1)

/* Both print -2147483648 */

/************************************************************************************/

// And if you keep increasing the binary literal, its actual value
// will be decreased until you reach the maximum binary literal and
// its actual value will be -1.

System.out.println(0b11111111111111111111111111111111); // 32 bits

/* Prints -1 */

如您所见,文字二进制(而增量)的实际值从int的最大值跳转到最小值,然后一直减少,直到达到-1,这是文字二进制的最大值。

这是个虫子吗?还是与签名/无符号号码有关?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-08 12:52:20

你用的是有符号整数。位32 (左边的“第一个”)是符号位。它是1表示它是一个负数,0表示正。然后执行2的补码,给出-1的值。在这里读到:

http://tfinley.net/notes/cps104/twoscomp.html

票数 20
EN

Stack Overflow用户

发布于 2012-01-08 12:52:55

这根本不是一个错误:因为int是无符号的,所以所有位到1确实意味着-1。

有符号整数的最左边的位,在二的补码中,是符号位。因此,你所看到的是意料之中的。

票数 5
EN

Stack Overflow用户

发布于 2012-01-08 12:52:55

实际上,这是一个签名的int,所以0xffff == 0b1111111111111111111111111111111111111111111111111111 == -1。

这不是一个积极的数字。

也见维基百科二补

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8777640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档