日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2024/4/17 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于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實際上是一個變量。

轉載于:https://www.cnblogs.com/kenkofox/p/4540045.html

總結

以上是生活随笔為你收集整理的关于0xFFFFFFFF和alpha,温故而知新的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。