- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我看到有人问关于错误“类型不匹配:无法将 int 转换为字节”的问题。但它们大多是由涉及的算术运算引起的。
这是我的案例:
(当我想在 Eclipse Kepler 中玩位时会发生这种情况)
//java 7 binary literals
byte a = 0b01111111; //8-bit it compiles
byte b = 0b10000000; //8-bit error: Type mismatch: cannot convert int to byte.
byte c = (byte) 0b10000000; //8-bit it works fine if casted.
问题是,如果它是 8 位并且最高位是 1,那么编译器会给出错误。我想知道为什么。前缀 0b 表示它是二进制文字,那么为什么编译器将最高位作为带符号的 int 数字或类似的数字?
感谢您的回答。
[编辑 3:]
byte a = -128; //a = 0xFF = 11111111 (8 bits), compiler says ok.
byte b = 0b11111111; //compiler error
[Edit2: 按位 & 运算也会以某种方式触发错误]
byte a = 0b00000000; //8 bits
a = (a&0xFF); //gives same error: Type mismatch: cannot convert int to byte
a = (byte)(a&0xFF); //it is fine to cast
[Edit1:截图已更新]
最佳答案
你说对了,怀疑这是关于有符号整数。在 Java 中,所有整数类型(byte
、short
、int
、long
)总是有符号的。 Java 使用二进制补码来存储有符号(读取“所有”)值。这基本上意味着,如果任何类型的第一位(不是文字中指定的第一位,而是存储的第一位)为 1,则该数字为负数。如果为 0,则为正。
第二个重要的事情是:Java 中没有 BYTE 文字。有 int
文字和 long
文字。写下的每个数字(无论是二进制(0b 前缀)、八进制(0 前缀)、十进制(无前缀)还是十六进制(0x 前缀))都是整数文字,除非您附加 L
(小写或大写),它是 long
。没有办法直接写下任何 short
或 byte
。
现在,这意味着您写下的所有这些示例都首先创建了一个 int
。您不会在那里创建 byte
。
所以,最后一部分是,如果您尝试将 int
存储在 byte
中会发生什么 - 不强制转换或强制转换。如果您显式转换,您基本上会告诉 Java 忽略任何不适合的位。它们将被切断——即使这改变了数字的值(例如,见下文)。如果你不施放,位仍然会被削减。但是 Java 不会那样做,如果它改变了值 - 以确保您真正意味着您正在做的事情。
将这一切链接到问题中的示例:int 0b01111111
是 127byte 0b01111111
是 127
-> 可以在没有任何溢出的情况下进行转换,因此即使没有显式转换,Java 也会执行此操作
int 0b10000000
是 128字节 0b10000000
是 -128
-> 转换时出现溢出问题,因此如果没有显式转换,Java 将抛出错误。
关于java - “Type mismatch: cannot convert int to byte”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20026942/
我有以下代码: foreach (byte b in bytes) { byte inv = byte.MaxValue - b; // Add the new value to a
我需要从这个文本文件source.txt中读取内容并将内容反向写入这个文本文件destination.txt。读取和写入必须使用逐字节完成! 我使用 BufferedReader 和 Buffered
我需要存储大量 RGB 颜色对象。对于某些常见用途,这些占用了我的应用程序总内存的 8% 到 12%。我目前将其定义如下: class MyColor { byte red; byte green;
我有一个由字节数组表示的整数。 byte[] result = getResult(); resultInt1 = Integer.parseInt(Bytes.toString(result));/
我正在尝试使用 Rusoto 库调用 AWS Lambda 函数。该请求有一个 JSON 编码的有效负载,我目前将其作为一个字符串,但该库为此坚持使用 bytes::bytes::Bytes 结构。我
我正在尝试基于 Tokio's example 编写一个 TCP 服务器. 当我尝试发送缓冲区时,编译器返回错误 0277。 我的代码:(playground) extern crate tokio;
我知道我可以通过 IList 进行枚举,例如: public byte[] ConvertToByteArray(IList> list) { IList newList = new List
考虑这样一个文本文件: Some text here. --- More text another line. --- Third part of text. 我想把它分成三部分,用---分隔符分开。
如果我有一个字节变量:byte b = 0; 为什么以下工作: b++; b += 1; // compiles ...但这不是吗? b = b + 1; // compile er
我有一个简单的字节数组,我想从中获取颜色。我的计划是用红色表示三位,绿色表示三位,蓝色表示两位。 8 位。 我认为颜色是正确的: 如有错误请指正 byte[] colours = new byte[
我的目标是比较两个字节数组中的两个字符串值。它实际上需要创建两个新的字符串对象才能使用 contains 方法。是选择正确还是有什么办法可以使用优化方式而不使用新的关键字。 if(new String
我正在使用github.com/tarm/serial来连接一些串行仪器。在开发过程中,我使用/dev/ttyp0和/dev/ptyp0对,其中go进程连接到一个,我使用screen连接到另一个。我编
好的,所以如果一个字节是 8 位,那么半字节就是 4 位。并且您可以将四分之一字节作为 2 位(尽管我想,如果有的话,它会被称为双位)。 虽然这是一致的,但如果我使用这个词,有人会感到困惑(或惊讶)吗
我在解释文件时遇到问题。文件构建如下: "name"-@-"date"-@-"author"-@-"signature" 签名是一个字节数组。当我读回文件时,我将其解析为 String 并拆分它: m
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
Java 让我很难过,因为它需要 ArrayList 的包装类秒。我将如何添加 byte[]到 ArrayList ? 最佳答案 LOL 认为我必须包装所有东西。 ArrayList作品。谢谢一晒。
我有一个 16 字节的 md5 散列,我需要使用 XOR 将其“折叠”成 4 字节数据:{1st 4 bytes} XOR {2nd 4 bytes} XOR {3rd 4 bytes} XOR {4
我正在学习SMSC smc91cx驱动代码,我学习了如何根据Application Note 9-6的说明编写smc91c111网卡的测试代码。 .我无法理解“传输数据包”下的以下说明: Write
我必须附加(可变数量的)字节数组。集合似乎只适用于包装类,即 Byte。大约 20 小时后,我想到了这个,并且它有效,但我想知道它是否可以改进(添加到列表,但欢迎任何其他改进建议:),即 Collec
我有两个基本相同的操作: insert_bytes(from, count) delete_bytes(start, stop) -> delete_bytes(from, count) insert
我是一名优秀的程序员,十分优秀!