Java 无符号数的处理

Java没有无符号数,这会带来很多问题。

static byte[] x = {(byte) 0xff,(byte) 0xff};

    public static void main(String[] args) throws IOException {

        byte a = x[0];

        int z = a&0xff;
        System.out.println(z);

    }

int z = a&0xff,

首先a为byte类型,在对其进行&操作时,会先将其转换成int类型,即

  1111 1111        1111 1111        1111 1111        1111 1111

&

  0000 0000        0000 0000        0000 0000        1111 1111

= 0000 0000         0000 0000        0000 0000        1111 1111

结果为255,若不进行&0xff操作直接赋值给z,则得到的值为-1.

时间: 2024-10-13 11:39:02

Java 无符号数的处理的相关文章

java把符号数转成无符号数

/** * @author YangQuanqing yqq 功能:将java中字节数据变成无符号数据在0--255范围内. * */ public class ConvertToUnsigned { private static short[] tempByteU = null;// 字节无符号型数据 /** *  返回无符号数 * @param a有符号字节数组 * @return字节无符号型数据 */ public static short[] toGetUnsignedByte(byte

java操作无符号数

吐槽一下,java对byte的操作太恶心了! 无符号数数组转换int类型的代码如下: public static int bytes4ToInt(Unsigned8[] ary) { int value = (((int)ary[3].get())<<24)+(((int)ary[2].get())<<16)+(((int)ary[1].get())<<8)+((int)ary[0].get())& 0x0FFFF; return value; }

JAVA byte有无符号数的转换

如果你只需要对英文文本的每个字节进行数据处理,则无需考虑有符号数和无符号数的转换问题: 但如果你需要对含有中文的文本进行字节处理,则可能需要考虑有无符号数的转换问题. 1.有符号byte 转 无符号int: byte b= -120; int a= bytes & 0xff; 2.无符号int 转 有符号byte: int a= 300; byte b= (byte)a; 就是那么简单~~~

C语言之有符号数和无符号数

我们知道,在C语言中存在无符号数和有符号数(一些高级语言如Java里面是没有无符号数的),但是对于计算机而言,其本身并不区别有符号数和无符号数,因为在计算机里面都是0或者1,但是在我们的实际使用中有时候需要使用有符号数来表示一个整数,因此我们规定,当最高位为1的时,表示为负数,最高位为0时,表示为正数. 1:有符号数和无符号数在数值上的区别. 有符号数的最高位用来表示符号,所以在最大的数值上,有符号数的最大值小于无符号数.以一个字节为例: 有符号数的取值范围为:-128 - 0 - 127 无符

深入理解计算机系统(2.5)------C语言中的有符号数和无符号数以及扩展和截断数字

上一篇博客我们讲解了计算机中整数的表示,包括无符号编码和补码编码,以及它们之间的互相转换,个人觉得那是非常重要的知识要点.这篇博客我们将介绍C语言中的有符号数和无符号数以及扩展和截断数字. 1.C语言中的有符号数和无符号数 上一篇博客我们给出了C语言中在32位机器和64位机器中支持的整型类型数据,我们这里只给出32位机器上的: 尽管 C 语言标准没有指定有符号数要采用某种编码表示,但是几乎所有的机器都使用补码.通常大多数数字是默认有符号的,比如当声明一个像12345或者0xABC这样的常量的时候

c的基础 1. 无符号数和补码

计算机中储存和处理的信息是以二进制信号表示的.单个的位不是是很实用,而将这些位 组合在一起,加上某种解释,即给不同的可能位模式赋予含义,我们就行表示怎样有限集合的元素,即实现各种数据结构.计算机中使用8位的块称之为字节作为最小的可寻址的存储器单位,机器级程序将存储器视为一个很大的字节数组,称为虚拟存储器.存储器的每一个字节都有一个唯一的数字来标识,称为地址,全部可能地址的集合称为虚拟地址空间. c语言中的指针,指针的值为某个存储块的第一个字节的虚拟地址.C编译器将每一个指针和类型信息结合起来,依

有符号数与无符号数比较的坑

前言 在c/c++ 的项目编译时经常会遇到 “comp.c:59:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]” 这种错误.作为一个”合格的程序员“ 对这种编译告警,通常的处理是忽略,毕竟大家一致的观点是:只有“warning”不算问题! 下面给出一个小case: #include <stdio.h> int sum_elements(int a[], unsig

2_C语言中的数据类型 (三)整数与无符号数

1.1       sizeof关键字 sizeof是c语言关键字,功能是求指定数据类型在内存中的大小,单位:字节 sizeof与size_t类型 1.1       int类型 1.1.1          int常量,变量 int就是32位的一个二进制整数,在内存当中占据4个字节的空间 1.1.2          printf输出int值 %d,输出一个有符号的10进制整数,%u,代表输出一个无符号的十进制整数 1.1.3          printf输出八进制和十六进制 %x,代表输出

有符号数的加减法 和无符号数的加减法,和,系统是如何识别有符号数和无符号数的

一.有符号数的加减法 1.符号数与无符号数的人为规定性: 一个数,是有符号数还是无符号数都是人为规定的.进行二进制运算时用无符号数或是补码运算时,结果都是正确的. 10000100+00001110 若规定为无符号数,即 132+146=146D . 若规定为符号数,则为-124+14=-110,而[-110]补=10010010.解释:10000100是 -124的补码,0001110是14的补码,在机器中运算后得出的结果是[-110]的补码.机器中的有符号数的运算一般就是补码的运算. 2.补