美文网首页
Java的无符号类型移位

Java的无符号类型移位

作者: 技术笔记 | 来源:发表于2019-10-23 13:50 被阅读0次

Java的原始类型里没有无符号类型,如果需要某个宽度的无符号类型,可以用>>>,这个是java的无符号右移操作符,或者使用下一个宽度的带符号类型来模拟,例如,需无符号的short,就用int来模拟:

int toUnsigned(short s) { 
           return s & 0xFFFF; 

具体问题:

                    a = (argb[i] & 0xff000000) >> 24;
                    r = (argb[i] & 0xff0000) >> 16;
                    g = (argb[i] & 0xff00) >> 8;
                    b = (argb[i] & 0xff) >> 0;

在做颜色转换的代码中,就碰到了这个问题,前面的代码,因为最高位如果是1,那么经过argb[i] & 0xff000000计算,假如argb[i] = 0xf0000000, 那么0xf0000000经过移位运算就是0xfffffff0了,十进制值为-16, 因为右移的规则只记住一点:符号位不变,左边补上符号位。

换种说法就是:
带符号右移运算符用“>>”表示,是将运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在高位补零,如果是负数,则在高位补1。

所以本来应该是a = 0xf0, 十进制值为240, 最后的结果因为把这个值算错了。

解决这个问题的办法有两种:
1.使用下一个宽度的带符号类型来模拟
2.使用无符号右移运算符>>>

所以正确的写法是:

                    A = (argb[rgb_idx] & 0xff000000) >>> 24;
                    R = (argb[rgb_idx] & 0xff0000) >>> 16;
                    G = (argb[rgb_idx] & 0xff00) >>> 8;
                    B = (argb[rgb_idx] & 0xff) >>> 0;

java窄的整型转换成较宽的整型时是有符号扩展,但是如果它是char,那么不管它将要被提升成什么类型,都执行零扩展。java从宽的整型转窄的整型时,是直接截取最低位的字节。

参考:

https://www.cnblogs.com/jpit/p/9068429.html
https://blog.csdn.net/A_zhenzhen/article/details/78835327

相关文章

  • Java的无符号类型移位

    Java的原始类型里没有无符号类型,如果需要某个宽度的无符号类型,可以用>>>,这个是java的无符号右移操作符,...

  • java二进制表示形式与移位操作符

    1.java二进制表示形式 2.移位操作符1.左移位操作符(<<)2.“有符号”右移位操作符(>>)3.“无符号”...

  • Guava-原生类型

    无符号和有符号 在计算机中,可以区分正负的类型,称为有符号类型,无正负的类型,称为无符号类型。 概述 Java的原...

  • 浅谈Java中移位运算符

    引言 Java中移位运算符一共有三种,<<(左移)、>>(右移)、>>>(无符号右移)。下面我分别介绍这三种移位运...

  • Class类文件结构

    按照Java虚拟机规范的规定,Class文件结构只有两种数据类型:无符号数和表 无符号数无符号数属于基本的数据类型...

  • 位移运算符

    1.<< 左移 2.>>> 无符号右移 3.>> 有符号右移 先说说移位,是对一串二进制数进行移位。 分为...

  • (2) 面试

    java基本的数据类型有几种,无符号与有符号整型有什么区别?8种4类:逻辑类型:boolean;字符类型:char...

  • Java数据类型精讲

    原文链接 Java数据类型精讲 JAVA中数值的特点 Java中的数值都是有符号的,不存在无符号的数,它们的取值范...

  • [Java] 移位运算1

    java中有三种移位运算符 为什么没有 无符号左移 ( <<< ) ? 因为左移是在后面补 0,而右移是在前面边...

  • 位运算(位掩码BitMask)的简单应用场景浅析

    在Java中,位运算符有:与(&)、非(~)、或(|)、异或(^)、移位(<< 和 >>)、无符移位(<<< 和 ...

网友评论

      本文标题:Java的无符号类型移位

      本文链接:https://www.haomeiwen.com/subject/wcfkvctx.html