当前位置: 首页 > 知识库问答 >
问题:

Java中的符号字节类型和位运算符?

许亦
2023-03-14

引用oracle网站“byte:字节数据类型是一个8位有符号二补码整数。它的最小值为-128,最大值为127(含)”。

在这里,前两行有效,但最后一行无效

            byte b = -128;
        byte b1 = 127;
        byte b2 = b>>>b1;//illegal

Q1)8位有符号到底是什么意思?二进制格式的128将是1000 0000,-128需要一个额外的负号位,如果所有8位都被占用,它将适合。

Q2)对于int,有一个无符号右移运算符,但这对于字节似乎是非法的,为什么会这样。无法防止字节溢出。在int的情况下,它可以工作

谢谢你的帮助

共有1个答案

鲜于宜修
2023-03-14

>

  • 就像它听起来的那样:有8位,包含2^8=256个可能的值。它是有符号的,所以范围是frmo-128到127(256个值)。最高有效位的值为-128。

    在Java,二进制数字提升发生在b等操作中

    演员阵容如下:

    byte b2 = (byte) (b >>> b1);
    

    JLS第5.6.2节讨论了二进制数字提升:

    加宽基元转换(§5.1.2)用于转换以下规则指定的一个或两个操作数:

    如果任一操作数是双精度类型,则另一个操作数转换为双精度。

    否则,如果任一操作数的类型为float,则另一个操作数将转换为float。

    否则,如果任一操作数为long类型,则将另一个操作数转换为long。

    否则,两个操作数都将转换为int类型。

    (强调地雷)

  •  类似资料:
    • 有符号和无符号变量在按位运算上有区别吗?< br >例如,在处理无符号数字时:< br> 将得到00000101。 但当处理带符号的数字时会发生什么?

    • 本章讲解 Rust 中的类型相关基础知识、运算符相关知识、和字符串的基本知识。

    • 这章我们来着重介绍一下字符串。 刚刚学习Rust的同学可能会被Rust的字符串搞混掉,比如str,String, OsStr, CStr,CString等等…… 事实上,如果你不做FFI的话,常用的字符串类型就只有前两种。我们就来着重研究一下Rust的前两种字符串。 你要明白的是,Rust中的字符串实际上是被编码成UTF-8的一个字节数组。这么说比较拗口,简单来说,Rust字符串内部存储的是一个u

    • 元组(Tuple) 在别的语言里,你可能听过元组这个词,它表示一个大小、类型固定的有序数据组。在 Rust 中,情况并没有什么本质上的不同。不过 Rust 为我们提供了一系列简单便利的语法来让我们能更好的使用他。 let y = (2, "hello world"); let x: (i32, &str) = (3, "world hello"); // 然后呢,你能用很简单的方式去访问他们: /

    • 像其他现代编程语言一样,Rust提供了一系列基础的类型,我们一般称之为原生类型。其强大的类型系统就是建立在这些原生类型之上的,因此,在写Rust代码之前,必须要对Rust的原生类型有一定的了解。 bool Rust自带了bool类型,其可能值为true或者false。 我们可以通过这样的方式去声明它: let is_she_love_me = false; let mut is_he_love_m

    • 问题内容: 我可以使用单个与号代替类似的按位运算符吗?可能会出现什么样的差异,是否有特定的示例可以清楚地说明此问题? 问题答案: 单身人士将始终检查这两个条件。如果双精度值判断为false,则它将在第一个条件之后停止。如果确实只需要1个2的条件为真或假,则使用2是“短路”状态检查的一种方法。 例如: 如果为,则第一个条件将失败,并且不会费心检查它的值。这是避免空指针的一种方法。 与和两个操作数始终