簡體   English   中英

移位位Java

[英]Shifting bits java

要插入該值,請先使用遮罩清除與給定顏色通道相對應的像素的8位。 例如,在紅色的情況下,將一個8位的掩碼左移16位,將其反轉(使用〜運算符),然后用RGB值將該掩碼“與”(&),以清除8位紅色,其他位保持不變。 接下來,將參數值(在這種情況下為紅色)左移相同的位數(在紅色的情況下為16),並將移位后的值“或”(|)轉換為像素值。

int getRed(){
    red = (Pixel>>16);
    red = ~Pixel;
    red = Pixel<<16 | Pixel;
    return red;
}

根據指示,我在做什么錯?

這里的問題似乎是理解賦值工作原理的一個基本問題(在Java中……以及幾乎所有命令式編程語言!)。 例如:

red = (Pixel>>16);
red = ~Pixel;

說的是:

  1. red Pixel值偏移16位

  2. 將按位取反的Pixel值分配給red 這將破壞您在上一步中計算出的red值。

如果要否定在步驟1中計算出的值,則需要執行以下操作:

red = ~red;

我相信您根本不了解發生了什么。 第一行已經不正確:

它說:“在紅色的情況下,將一個8位的掩碼左移16位,將其反轉(使用〜運算符),然后將該掩碼與RGB值“和”(&)”)

意思是

8 bit mask of ones:  0xFF  (00000000 00000000 00000000 11111111)
shift left 16 bits:  0xFF << 16  (giving you  00000000 11111111 00000000 00000000)
invert it         :  ~ (0xFF << 16)  (giving you (11111111 00000000 11111111 11111111)
& this mask with RGB value:  result = pixel & (~(0xFF << 16))

result是清除了第17-24位的pixel

這是第一步(是,如作業中所述,還有后續步驟),以pixel為單位設置“紅色”值

我不確定這是否是您的意圖,但是您開發的內容與您的問題無關:不是設置紅色值,而是您正在獲得紅色值。

但是,您開發的內容仍然不正確。 例如,您應該有一個相似的掩碼,第17-24位為1,其他位為0,然后&帶有該掩碼的像素,然后將剩余值(位於第17-24位)移至第0-7位。

我不會給您實際的答案,因為從中學習是您的工作。 但是我相信我給出的提示綽綽有余。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM