byte b = 0b1111_1111;
byte c = 0b111_1111;
byte d = 0b0111_1111;
我认为byte
的意思是不能大于8位的容量。0B1111_1111是8位。
Java中的所有基本整数类型都是有符号的。确切地说,byte
、short
、int
和long
是带符号的大尾序两个补码整数。这意味着它们从-2n-1运行到2n-1-1,其中n是一个字节(在Java中为byte.size
)的-8位数,因此范围从-128到127。
您使用的数字总是一个整数;数字文字总是。但是,整数实际上是十六进制中的值0x000000FF
。无法存储,因为它高于127。但是,您可以执行显式转换;您的值毕竟是由8位组成的。
byte b = (byte) 0b1111_1111
工作的原因是它忽略了该值左侧的24位。现在,如果您打印它,您将得到-1作为值,尽管0b1111_1111
表示8位二进制补码形式的1。
如果您需要它来表示整数值255,那么您需要执行以下小技巧:
int i = b & 0xFF;
问题内容: 遇到一个错误地使用 而不是 在其代码中的人,它没有显示为编译错误。 是因为 是相同的 ? 问题答案: 没有编译错误,因为它是有效的(尽管相当无用) 一元运算符 ,其使用方式与以下方式相同: Java语言规范中的相关部分是Unary Plus运算符+(第15.15.3节) 。它指定调用一元运算会导致操作数的一元数值提升(第5.6.1节)。这意味着: * 如果操作数是编译时类型的,,,或,
问题内容: 为什么在下面的代码中没有出现编译错误?我得到一个有点混乱的地方。是因为它们有关系吗? 问题答案: 为什么在下面的代码中没有出现编译错误? 因为编译器只关心您要强制转换的表达式的静态类型。 看这两行: 您 知道在第二行中,由于第一行,该值仅引用类型的对象,而编译器则没有。对于所有的编译器知道(编译第二线时),它 可能 实际上已经: …哪里有扩展和实现的类。因此它是有效的(在编译时),以铸
我尝试在编译器中运行此代码,它给出了“circle”的输出: 我没有将打印功能设置为虚拟,但它仍然具有相同的效果。这有什么原因吗?
使用sizeof()打印变量的大小 为什么sizeof()返回int的大小,而不是短int,即2个字节?
问题内容: 下面的代码可以快速编译和运行。 我希望这是一个编译错误,因为结构永远不能符合AnyObject。如以下通过无法编译的代码所示。 我知道某些类型(例如String)可能会发生桥接。这将转换引用类型的值类型。 在写这个问题时,我想知道投射对象的类型是什么,似乎它也以某种方式被桥接。 为什么允许这种类型的铸造?似乎期望引用类型的函数违反了约定。 在重构一些代码以支持值类型时,我偶然发现了这一
我刚开始编程,我总是收到错误消息,“不兼容的类型,int不能转换为int[]”,问题是如果R1和R2的长度相等,就把它们加在一起,如果不是,打印一条消息,说“数组必须是相同的长度”,如果这很重要,不确定我在哪里出错了,任何帮助都将非常感谢