Java 中 byte 类型初始化问题
很早的时候由于工作需要,接触过一点 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
。
我觉得坑有两个:
- 为什么 byte 类型在 Java 中要被设计成
Int8
而不是UInt8
? - Java 的类型系统太不灵活了,看看人家 Swift 中的 literal
转载于:https://www.cnblogs.com/jinhengyu/p/8183289.html
Java 中 byte 类型初始化问题相关推荐
- Java中byte类型的范围
Java中为什么byte的范围是 -128~127 在java中byte类型占8位 表示的范围是0000 0000 ~ 1111 1111 总共256个数, java中byte类型有正负,最高位表示正 ...
- java byte 正数最大_关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)...
先看一段推理 +124:0111 1100 -124:1000 0100 +125:0111 1101 -125:1000 0011 +126:0111 1110 -126:1000 0010 +12 ...
- Java中Byte类型数据在运算中的问题
比如: byte a=1; byte b=2; byte c; c=a+b; //这样是计算不出c,是错误的 c=a+1; //这样也是不能计算c的 c=64+1; //为什么这样就能计算c,在Jav ...
- Java中byte类型的取值范围
取值范围为-128~127 1.为什么是[-128,127] 计算机中存储最大的应该是0111 1111,第一位是符号位,所以表示最大的数值:127 存储的1 1111111应该是最小的数值: ...
- java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)
java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...
- java中byte数组与int类型的转换(两种方式)
java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...
- java char 计算_经典Java面试题之Java中Char类型的运算
经典Java面试题之Java中Char类型的运算 char在java中称为"字符型",占2个字节.本文是百分网小编搜索整理的关于经典Java面试题之Java中Char类型的运算,有 ...
- Java中BigDecimal类型的加减乘除及大小比对
Java中BigDecimal类型的加减乘除及大小比对 前言 BigDecimal解释 创建BigDecimal类型 加减乘除计算 结果分析 结论 除法的补充 两个BigDecimal的比对 前言 在 ...
- java中各种类型所占内存空间大小
一.常用类型占用内存大小 java中常用类型所占内存大小,以下值以实测为准. 类型 数量 大小 备注 byte 1 1B byte 1024 1KB int 1 4B int 1024 4KB boo ...
- java中double类型占几个字节_java中各种数据类型占用字节数
1字节(Byte)=8bit java的基本类型 类型 所占字节 byte 1 short 2 int 4 long 8 float 4 double 8 char 2 String中字母和汉字所占字 ...
最新文章
- 遭遇“生活天花板”,如何用 OKR 弯道超车?
- git命令升级版用法
- 面向对象编程思想以及强、弱引用总结
- mkdir用大括号同时建立多个同级和下级目录
- linux中nginx的nginx.config文件的配置和启动(包括重启)
- Mac配置vscode ssh远程连接主机(远程办公必备)
- 手写数字图像识别-SVM算法投票法实现多分类
- html5框架如何快速搭建,AmazeUI框架搭建的方法步骤(图文)
- 光耦w314的各引脚图_常用光耦型号代换大全
- vs中资源文件和外部依赖项是什么意思?
- sinx泰勒展开_函数极限的最强解法——泰勒公式!!!
- 如何让二维码变得好看
- 5G NR 缩略语整理
- 广安职业技术学院计算机在那个校区,广安职业技术学院有几个校区哪个更好
- STM8S的ADC配置
- 一篇文章搞定DX9.0c 环境里的3DXSpriet !!
- android管理交换机,适用于Android的Visual Studio模拟器 – 运行模拟设备需要内部虚拟网络交换机...
- 服务器被植入广告文件,[求助]服务器后台被植入webshell,看不懂什么意思
- 计算机信息心得体会作文50字,信息技术心得体会(精选11篇)
- 天梯赛真题L3-008: 喊山(BFS + 数据结构)
热门文章
- unity 编辑器 混合使用固定布局和自动布局(二)
- Unity中脚本的生命周期
- 《设计模式之美》课程笔记之DDD开发实战
- Linux的java配置及tomcat的启动
- linux查看磁盘使用情况及每个文件夹占用磁盘大小
- 数据库与表的操作之重命名、删除表
- 计算机网络基础系列(四)HTTP、七层模型及其内部对应协议
- Codeforces Round #479 (Div. 3) F. Consecutive Subsequence (简单dp)
- 【转】如何有效地记忆与学习
- [转]win7添加xp的快速启动栏