关于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 条评论
登录 后参与评论

相关文章

来自专栏cmazxiaoma的架构师之路

一场让我持续懵比的面试

2084
来自专栏刁寿钧的专栏

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

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

5510
来自专栏大数据钻研

59条令人捧腹但真实的程序员编程语录

我收集了很多关于软件开发者的编程语录。这些语录和软件开发维护、调试、软件bug、软件设计和文档、代码质量、测试和管理等相关。下面这59条编程语录虽然令人捧腹但也...

2796
来自专栏数据和云

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

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

3526
来自专栏大数据文摘

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

3374
来自专栏数据小魔方

leaflet在线地图之热力密度图

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

1172
来自专栏牛客网

双非机器学习秋招坎坷路

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

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

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

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

3094
来自专栏牛客网

测试工程师面试经验

因为专业非计算机类,所以校招一直找的都是测试相关工作。面试的也比较久了,有些都不太记得了,有需要的可以看一下噢。 海康威视: 一面:主要问的就是自己的项目,为什...

4485
来自专栏牛客网

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

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

1154

扫码关注云+社区