簡體   English   中英

二進制AND運算符的操作數類型

[英]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;

例如,如果m4 ,則1 << 416 ,負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.

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