关于0xFFFFFFFF和alpha,温故而知新

做图像处理都好多年了,今天随手做个小画板的时候,发现一个挺有趣的小坑。而其实这个小坑,以前也坑过自己,不过太久没处理了,又踩到坑里了。

先来看看:0xFFFFFFFF>>24

这个结果是什么呢?是不是妥妥的,0x000000FF?也就是要拿到的alpha?

实际不然,而且这个也并不是什么bug,或者编译器的漏洞。实际上,这个结果是0xFFFFFFFF,console.log/trace出来,就是一个-1。

纠结吧?怎么就变了负数?

上次中坑,没理解清楚,简单理解是编译器变量高位溢出了。因为在C++中做这个操作,是没问题的,当时就没有太多注意这个问题。结果用了一个旁门左道去解决:0xFFFFFFFF/2>>23

现在回头想想,都觉得可笑,这样的小把戏太幼稚,too naive!

今天又遇到了这个问题,而且大脑断片了,很久都没想起来原来已经中过坑,不过也好,倒是认真的深究了一下这个小问题。

其实,还是怪自己把计算机原理忘掉了,这就是平时工作眼高手低的结果。

因为flash和js中,0xFFFFFFFF其实是一个uint,用补码表示,都是1,而右移位操作中,会按照原来最高位进行补位,例如原来是0就补0,原来是1就补1。

这样就好理解了,uint存储0xFFFFFFFF,那么最高位就是1,所以,无论怎么移位,还是全1,打印出来,当然就是-1。

那么,回到纸面上来,回到上层语言中,怎么做这个呢?小把戏就一边玩儿去吧。

逼格高点,应该是:

(0xFFFFFFFF>>24)&0x000000FF

当然,这里0xFFFFFFFF实际上是一个变量。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

【大数据百科】关于大数据你知道多少? ——什么是大数据?①

1 Do you know Big Data? 关于大数据你知道多少? ——What is big data?什么是大数据? Many definitions…!...

3224
来自专栏牛客网

双非机器学习秋招坎坷路

写在前面的话:部分牛友在评论区喷 强调机器学习、算法要求没那么高,那么我说一句,你们凭心而论,如果不是手里有那么些个竞赛大奖或者acm等算法大奖,你们的简历怎么...

4767
来自专栏大数据文摘

用Python也能进军金融领域?这有一份股票交易策略开发指南

5054
来自专栏牛客网

阿里蚂蚁金服Java研发四面面经

【每日一语】【每日一语】在年轻的时候,在那些充满了阳光的长长的下午,我无所事事,也无所惧怕,只因为我知道,在我的生命里有一种永远的等待。挫折会来,也会过去,热泪...

1314
来自专栏tkokof 的技术,小趣及杂念

代码小记

  前一阵子一直在制作一款小游戏,虽说最终的成果并不完美,但也算是花了不少精力,网上批评的声音不少,但更多的则是鼓励,这也让我们颇感欣慰,自省之余,也算拾得一些...

762
来自专栏刁寿钧的专栏

10分钟入门关系型数据库(一):三范式

本文是《十分钟入门关系型数据库》系列技术文章的第一篇,主要介绍了数据库的三范式。

6050
来自专栏程序人生

如何提高代码质量?

好的程序员从来不靠格子衫或者颜值吃饭,就像你家 C 罗明明可以靠脸,却非要用不断精进的身体和技术迷倒你。

1280
来自专栏数据小魔方

leaflet在线地图之热力密度图

之前在练习leaflet的时候没有找到R语言leaflet中的热力密度图接口函数,一直感觉很遗憾。

1732
来自专栏数据和云

杨廷琨 - 用SQL解析神奇的扑克牌魔术

杨廷琨,网名 yangtingkun 云和恩墨技术总监,Oracle ACE Director,ACOUG 核心专家 老杨带你用SQL解释经典的扑克牌魔术 --...

3656
来自专栏生信技能树

标准TCGA大文章需要哪些数据?[赠重磅资料]

很多人总是问我如何挖掘TCGA的数据,发文章! 可是他却连TCGA的数据是怎么来的都不知道,TCGA发了几十篇CNS大文章(自己测序的)了,每篇文章都有几百个左...

3495

扫码关注云+社区

领取腾讯云代金券