[英]Type of operand of binary AND operator
哪種類型的運算符使用邏輯AND運算符(&)? 我需要輸入AND縮寫a
和一個介於1到16之間的“數字” m
並獲得另一個short b
。 該原始類型必須為m
。
例:
? m = ...; //with 1 <= m <= 16
short a = 2;
short b = a & m;
我所看到的示例如下:
short b = a & 0xY;
如何以與AND正確的方式將m
值轉換為Y
? 所以b
包含最后m
的位a
。
如果將m用作int,則不會獲得正確的結果。
我讀這頁關於運營商,但它並沒有說有關的事情。
謝謝。
為了得到最后的m
位出a
,你需要用最少的顯著位掩碼m
設置位1
,其余設置為0
。
您可以通過從等於2 m的2的冪中減去1或向左移位1
次獲得m
。
int bitmask = (1 << m) - 1;
例如,如果m
為4
,則1 << 4
為16
,負1為15
,或0b1111
1
s。
然后,您可以使用按位與運算符&
來獲得b
的值。 但是要注意,該運算符(除其他外)執行二進制數值提升 。 二進制數值提升可確保使用不同的類型將較窄的類型擴展為與較寬的類型相同的類型。 但是,這也拓寬了既int
,如果他們不已經int
。
這意味着在操作發生之前,雙方至少都提升為int
。 把它拋short
。
short b = (short) (a & bitmask);
注意,由於二進制數字提升,位掩碼的類型也可能是int
。
您完全不需要將m
轉換為Y
您只需要評估a & m
。
如果這樣做時遇到問題,則無法說明問題所在。 您當然已經忘記將結果short
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.