public class Solution { public int findComplement(int num) {//以num=7為例,按照題目要求 取對應位的相反數為000,結果輸出為0//第一步:取最高位 Integer.highestOneBit(num)//取num對應的二進制數的做左的1所對應的數,例如7二進制: 111(對于int類型數,省去前面28個0),取最高位為0100//第二步:向左移一位,并減1,生成num的二進制數相對應的“掩碼”(個人感覺有點類似于計算機網絡中的子網掩碼) Integer.highestOneBit(num)<<1;0100向左移一位變成 1000 1000 減1 后變成 0111 //第三步:對于num取反 ,再 “與” 掩碼 得到最終結果num取反后(~num)得 1111 1111 1111 1111 1111 1111 1111 1000按照第二步得到的 掩碼 0000 0000 0000 0000 0000 0000 0000 0111相與之后的結果就是 0000 0000 0000 0000 0000 0000 0000 0000 }}
新聞熱點
疑難解答