首页 > 编程语言 >java 十六进制字符串转换为有符号整数

java 十六进制字符串转换为有符号整数

时间:2023-08-02 20:15:21浏览次数:32  
标签:十六进制 java 带符号 取反 整数 intValue 溢出 字符串 0x10000

String hexString = "FEF7"; // 十六进制字符串
int intValue = Integer.parseInt(hexString, 16); // 将十六进制字符串转换为整数
short signedValue = (short) intValue; // 转换为短整型(16位有符号整数)
int intValue = (bytes[1] & 0xFF) << 8 | (bytes[0] & 0xFF); // 合并两个字节为一个整数
return (short) ((intValue > 0x7FFF) ? (intValue - 0x10000) : intValue);

示例:0xF7FE代表-26.5

如果假设 0xFEF7 是一个带符号整数的补码,并且你希望将其转换为负数,那么需要执行以下步骤:

  1. 取反操作: 首先,对补码进行逐位取反操作,即将 0 变为 1,将 1 变为 0。

  2. 加 1: 在取反的结果上加 1。

这两个步骤合并起来,就是将补码取反后再加 1,得到原始的负数。以下是具体的计算过程示例:

假设 0xFEF7 是一个带符号整数的补码:

  1. 取反操作: 逐位取反得到 0x0108。

  2. 加 1: 在取反结果上加 1 得到 0x0109。

最终,原始的负数是 -265,与你之前提到的结果一致。请注意,这是假设 0xFEF7 是一个带符号整数的补码,实际情况可能需要更多上下文信息来确认。

方法解析:
intValue - 0x10000 的目的是将超出有符号短整数表示范围的值调整为在合法范围内。如果不执行减法操作,那么在以下情况下可能会发生问题:

假设你有一个带符号短整数的取值范围是 -32768 到 32767。如果 intValue 大于 32767,但你直接将其强制转换为 short,则会发生溢出。这是因为在 Java 中,整数溢出会导致循环,例如 32768 可能会变成 -32768,而 32769 可能会变成 -32767,依此类推。这不是你所期望的结果。

通过将 intValue 减去 0x10000,你实际上是在二进制中将高位的溢出部分减去,以使得值适应于有符号短整数的表示范围。这确保了正确的转换,并将溢出部分正确地移除,以得到合适的带符号短整数。

执行 intValue - 0x10000 是为了确保在转换过程中处理了可能的溢出情况,以便正确表示带符号短整数。

这个值之所以是 0x10000,是因为在 16 位表示中,最高位(最左边的位)表示的是符号位。在有符号短整数中,符号位为 1 时表示负数,为 0 时表示正数。所以,用一个 16 位的二进制数来表示有符号短整数,它的范围是从 -32768 到 32767。

当你希望将一个超出该范围的值转换为合法的带符号短整数时,你需要考虑如何修复溢出。通过减去 0x10000,你实际上是在处理二进制中的溢出情况。例如,如果你的值超过 32767,它的二进制表示的最高位将是 1,而带符号短整数的最大正值的二进制表示的最高位也是 1。这种情况下,通过减去 0x10000,你会将最高位的溢出部分减去,从而得到正确的带符号短整数。

标签:十六进制,java,带符号,取反,整数,intValue,溢出,字符串,0x10000
From: https://www.cnblogs.com/zhaogaojian/p/17601623.html

相关文章

  • 字符串转化为整数的C库函数
    #include<stdio.h>#include<stdlib.h>intmain(void){charstr[10]="12345";charstr1[10]="hello";intval;val=atoi(str);printf("val=%d,str=%s\r\n",val,str);val=atoi(s......
  • Java内部类
    一、内部类的定义:定义在类中的类二、内部类的作用内部类可以访问外部类的所有数据,包括被【private修饰的私有数据】(1)为什么内部类可以访问外部类的所有成员变量内部类编译后会单独生成一份class文件,编译器会自动为内部类添加一个【外部类类型】的实例,内部类通过【外部类......
  • 初学C语言day08--字符串
    字符串字符:字符是在计算机中以整数形式存储的,在需要显示成字符时会根据ASCII表中对应的关系,来显示对应的符号或图案'\0'0空字符'0'48'A'65'a'97串:是一种数据结构,是由一组连续的若干个类型相同的数据组成,末尾有一个结束标志对于这种数据结构的处理......
  • 实验六 字符串的基本操作
    实验六字符串的基本操作一、实验目的1、培养分析问题并对进行建模的能力。2、熟练运用字符串基本功能解决实际问题。二、实验内容1、获取字符串中汉字的个数,如:“我的English学的不好”汉子个数是6个。2、去掉字符串数组中每个字符串的空格,如:“todayisagoodday”结果......
  • 实验七 字符串的内建函数
    实验七字符串的内建函数一、实验目的1、培养分析问题并对进行建模的能力。2、熟练运用字符串内键函数解决实际问题。二、实验内容1、将字母全部转换为大写或小写,如:”ILovePython”转化结果:“ilovepython”或者“ILOVEPYTHON”2、判断用户名是否合法,从键盘上输入一个用户......
  • 怀念中的java
     学了这门语言后一直没能做成项目,倒是安装环境,用记事本编辑的话,除了js最好做的就是java了。 以前学java的时候是一帮很有朝气的同学,在一个培训班,每天苦哈哈。从c开始学的语言,学完基础部分转入java。引入面向对象。后来引发了自己对面向对象长达好多好多年的思考。 老师说......
  • 老杜 JavaWeb 讲解(十七) ——JSP补充
    (十六)JSP补充相关视频:49-JSP的page指令以及九大内置对象和EL表达式指令指令的作用:指导JSP的翻译引擎如何工作(指导当前的JSP翻译引擎如何翻译JSP文件。)指令包括哪些呢?include指令:包含指令,在JSP中完成静态包含,很少用了。(这里不讲)taglib指令:引入标签库的指令。这个到JS......
  • 软件测试 | Java中的关键字
    Java中也有许多关键字(也叫保留字),如public、static等,这些关键字不能当做标识符使用。表2-1列出了Java中的关键字,这些关键字并不需要去硬背,因为在程序开发中一旦使用了这些关键字做标识符时,编辑器会自动提示错误。对于以上的关键字,要特别注意的有如下3点:(1)虽然goto、const在Java中并没......
  • 软件测试 | Java程序的注释
    在任何编程语言之中,都存在注释,注释的主要功能是让其他用户可以方便地阅读每段程序,提高程序的可读性,还可以通过注释屏蔽掉一些暂时不用的语句,等需要时直接取消此语句的注释即可,在Java中根据功能的不同,注释主要分为单行注释、多行注释、文档注释3种,下面分别进行介绍。单行注释,就是在......
  • 软件测试 | 一个简单的Java范例
    下面给出一个简单的Java程序范例,观察Java成都基本结构及相同点。范例:定义一个简单类publicclassTestJava{publicstaticvoidmain(String[]args){//Java操作的一个简单范例,输出和乘方intnum=10;......