很早的时候由于工作需要,接触过一点 Java,于是有了这个坑,今天回头看到自己在 Stackoverflow 上提的问题发现了它,于是再记录下。

在使用中,需要将 byte 类型的的每一位都置 1。我万万没有想到这么一个简单的操作,在 Java 中有各种约束。

首先看看代码:

// 方式 1
byte allBitsOne = 0xFF;
// 方式2
byte allBitsOne = (byte)0xFF; 
// 方式3
byte allBitsOne = 0xFFFFFFFF;

上面的哪个方式可以达到将 byte 类型的每一位都置 1 的需求呢?答案就是 2,3。

为什么方式 1 不可以呢?

因为在 Java 中,整型字面量(literal integers)是采用的固定的有符号 32 位整型来表示的。而 byte 类型在 Java 中又是一个有符号的 8 位类型,表示范围是十进制 -128~127。于是 0xFF 代表的十进制 255 超过了 byte 类型的表示的范围。

为什么方式 2 可以呢?

因为 0xFF 这个 32 位整型来说,低 8 位都是 1,现在用 (byte) 强制转换一下,将其多余的高位都丢弃,于是剩下的 8 位都是 1 的 byte 赋值给左边。

为什么方式 3 可以呢?

因为在 Java 中,整型字面量(literal integers)是采用的固定的有符号 32 位整型来表示的。并且是采用的补码的形式,那么对于 0xFFFFFFFF 它所表示的数的绝对值就是各位按位取反后 + 1,可以知道绝对值是 1,而最高位是符号位,于是表示的就是 -1,再根据 byte 类型在 Java 中可以表示 -128~127,所以可以赋值,而 -1 在 byte 类型上就是每一位都是 1

我觉得坑有两个:

  1. 为什么 byte 类型在 Java 中要被设计成 Int8 而不是 UInt8
  2. Java 的类型系统太不灵活了,看看人家 Swift 中的 literal

转载于:https://www.cnblogs.com/jinhengyu/p/8183289.html

Java 中 byte 类型初始化问题相关推荐

  1. Java中byte类型的范围

    Java中为什么byte的范围是 -128~127 在java中byte类型占8位 表示的范围是0000 0000 ~ 1111 1111 总共256个数, java中byte类型有正负,最高位表示正 ...

  2. java byte 正数最大_关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)...

    先看一段推理 +124:0111 1100 -124:1000 0100 +125:0111 1101 -125:1000 0011 +126:0111 1110 -126:1000 0010 +12 ...

  3. Java中Byte类型数据在运算中的问题

    比如: byte a=1; byte b=2; byte c; c=a+b; //这样是计算不出c,是错误的 c=a+1; //这样也是不能计算c的 c=64+1; //为什么这样就能计算c,在Jav ...

  4. Java中byte类型的取值范围

    取值范围为-128~127 1.为什么是[-128,127]   计算机中存储最大的应该是0111 1111,第一位是符号位,所以表示最大的数值:127   存储的1 1111111应该是最小的数值: ...

  5. java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

  6. java中byte数组与int类型的转换(两种方式)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

  7. java char 计算_经典Java面试题之Java中Char类型的运算

    经典Java面试题之Java中Char类型的运算 char在java中称为"字符型",占2个字节.本文是百分网小编搜索整理的关于经典Java面试题之Java中Char类型的运算,有 ...

  8. Java中BigDecimal类型的加减乘除及大小比对

    Java中BigDecimal类型的加减乘除及大小比对 前言 BigDecimal解释 创建BigDecimal类型 加减乘除计算 结果分析 结论 除法的补充 两个BigDecimal的比对 前言 在 ...

  9. java中各种类型所占内存空间大小

    一.常用类型占用内存大小 java中常用类型所占内存大小,以下值以实测为准. 类型 数量 大小 备注 byte 1 1B byte 1024 1KB int 1 4B int 1024 4KB boo ...

  10. java中double类型占几个字节_java中各种数据类型占用字节数

    1字节(Byte)=8bit java的基本类型 类型 所占字节 byte 1 short 2 int 4 long 8 float 4 double 8 char 2 String中字母和汉字所占字 ...

最新文章

  1. 遭遇“生活天花板”,如何用 OKR 弯道超车?
  2. git命令升级版用法
  3. 面向对象编程思想以及强、弱引用总结
  4. mkdir用大括号同时建立多个同级和下级目录
  5. linux中nginx的nginx.config文件的配置和启动(包括重启)
  6. Mac配置vscode ssh远程连接主机(远程办公必备)
  7. 手写数字图像识别-SVM算法投票法实现多分类
  8. html5框架如何快速搭建,AmazeUI框架搭建的方法步骤(图文)
  9. 光耦w314的各引脚图_常用光耦型号代换大全
  10. vs中资源文件和外部依赖项是什么意思?
  11. sinx泰勒展开_函数极限的最强解法——泰勒公式!!!
  12. 如何让二维码变得好看
  13. 5G NR 缩略语整理
  14. 广安职业技术学院计算机在那个校区,广安职业技术学院有几个校区哪个更好
  15. STM8S的ADC配置
  16. 一篇文章搞定DX9.0c 环境里的3DXSpriet !!
  17. android管理交换机,适用于Android的Visual Studio模拟器 – 运行模拟设备需要内部虚拟网络交换机...
  18. 服务器被植入广告文件,[求助]服务器后台被植入webshell,看不懂什么意思
  19. 计算机信息心得体会作文50字,信息技术心得体会(精选11篇)
  20. 天梯赛真题L3-008: 喊山(BFS + 数据结构)

热门文章

  1. unity 编辑器 混合使用固定布局和自动布局(二)
  2. Unity中脚本的生命周期
  3. 《设计模式之美》课程笔记之DDD开发实战
  4. Linux的java配置及tomcat的启动
  5. linux查看磁盘使用情况及每个文件夹占用磁盘大小
  6. 数据库与表的操作之重命名、删除表
  7. 计算机网络基础系列(四)HTTP、七层模型及其内部对应协议
  8. Codeforces Round #479 (Div. 3) F. Consecutive Subsequence (简单dp)
  9. 【转】如何有效地记忆与学习
  10. [转]win7添加xp的快速启动栏