[java 基础知识] byte int 互转

简介: [java 基础知识] byte int 互转

java中byte int 是有符号的,在计算机系统中,数值一律用补码来表示(存储)

  • java 中 int占4个字节
  • java 中 byte占1个字节
  • 补码知识:
  • 正数的原码=反码=补码
  • 负数的补码 = 反码 + 1 (反码 = 原码按位取反,除了符号位)

题目1

将byte数值-127 转为无符号 int值

byte类型的 -127

⇒ 1111 1111 (原码)

⇒ 1000 0000 (反码)

⇒ 1000 0001 (补码)

因为Java的int类型占4个字节

byte 转 int 的时候 ,高位补符号位 ,也就是 1

在机器中表示为 1111 1111 1111 1111 1111 1111 1000 0001

byte a = (byte) -127;

⇒ 原码 1000 0000 0000 0000 0000 0000 0111 1111 (-127)

怎么确保扩展时补0 呢?

int b = a & 0xff
//
//0000 0000 0000 0000 0000 0000 1111 1111  ==> 0xFF 高24位都是0
& 1111 1111 1111 1111 1111 1111 1000 0001  ==> -127 int 形式
//0000 0000 0000 0000 0000 0000 1000 0001  
达到低位不变高位补0的效果  补0扩展
//

0000 0000 0000 0000 0000 0000 1000 0001 是正数 所以就是原码

所以,byte类型的 -127 转为 无符号int 就是129

题目2

将int数值129 转为byte值

int 转 byte

byte c = (byte) 129;

⇒ 129 (int类型4个字节)正数补码 = 原码

0000 0000 0000 0000 0000 0000 1000 0001

⇒ 转byte (只保留1个字节)

1000 0001

⇒ 转 原码 (先-1 再取反)

1111 1111

也就是 -127

目录
相关文章
|
14天前
|
Java
byte加byte居然是int了
为什么在Java中,byte加byte的结果不是byte,而是int?本文将带你从Java语言规范和JVM规范层面研究该问题。
37 3
byte加byte居然是int了
|
15天前
|
存储 算法 Java
Java零基础-charAt(int index)详解
【10月更文挑战第20天】Java零基础教学篇,手把手实践教学!
35 4
|
5月前
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`"123abc"`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
|
20天前
|
存储 算法 Java
Java零基础-charAt(int index)详解
【10月更文挑战第16天】Java零基础教学篇,手把手实践教学!
11 1
|
29天前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
42 3
|
3月前
|
Java
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
这篇文章解释了Java中`int`基本数据类型和其包装类`Integer`之间的区别,并指出在进行`==`运算时,`Integer`会拆箱为`int`类型,然后比较它们的值是否相等。
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
|
3月前
|
Java
【Java基础面试五】、 int类型的数据范围是多少?
这篇文章回答了Java中`int`类型数据的范围是-2^31到2^31-1,并提供了其他基本数据类型的内存占用和数值范围信息。
【Java基础面试五】、 int类型的数据范围是多少?
|
5月前
|
安全 Java 编译器
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
41 1
|
4月前
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
68 0
|
4月前
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
114 0