[問題] <<和|=的意思

看板java作者 (我是B型)時間11年前 (2014/03/06 04:36), 編輯推噓2(209)
留言11則, 6人參與, 最新討論串1/2 (看更多)
現在在看Cracking The Coding Interview 裡面一段java看不太懂 1<<val 是不是指 val所有位元向左邊移一個位子,然後最右邊的放入0 為什麼要用(1<<val)>0 來當做檢驗字母有沒有重複的其中一項因素呢? 還有我也看不太懂 checker |=(1<<val); 這個程式是用來判斷string裡的char是不是都不相同 public boolean isUniqueChars(String str){ if (str.length()> 256) return false; int checker = 0; for (int i=0; i<str.length(); i++){ int val=str.charAt(i) - 'a'; if((checker & (1<<val))>0{ return false; } checker |= (1<<val); } return true; 謝謝 -- 恬靜,閑適安靜,很美好的寧靜 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 135.0.163.188 ※ 編輯: yule1224 來自: 135.0.163.188 (03/06 04:44) ※ 編輯: yule1224 來自: 135.0.163.188 (03/06 04:45)

03/06 07:41, , 1F
1<<val是1左移val個bit,程式原理是用bit mask記錄已出現字
03/06 07:41, 1F

03/06 07:44, , 2F
元,a記在第0bit,b第1bit依此類推,某bit為1代表字元已出現
03/06 07:44, 2F

03/06 09:20, , 3F
應該去查 bitwise operation
03/06 09:20, 3F

03/06 10:08, , 4F
這程式碼漏個左括號不能跑
03/06 10:08, 4F

03/07 01:21, , 6F
bitops.html
03/07 01:21, 6F
謝謝 另外 我先前有寫錯,是要判斷不同的char 不是字母 ※ 編輯: yule1224 來自: 135.0.163.188 (03/07 01:26)

03/07 01:49, , 7F
我找了書來看,這一題規定只有 a-z,也沒有開頭 >256 那行
03/07 01:49, 7F

03/07 01:51, , 8F
若規定只會有 a-z,改成判斷 >26 會比較合理
03/07 01:51, 8F

03/07 11:46, , 9F
>256是限制字串長度 跟判斷範圍無關啊 樓上...
03/07 11:46, 9F

03/07 11:51, , 10F
前提滿足只有 a-z 的情況下,檢查是否 >26 是一種快速判斷
03/07 11:51, 10F

03/07 13:54, , 11F
java在位元運算超過範圍的實作, 建議大家try一下
03/07 13:54, 11F
文章代碼(AID): #1J5uhExO (java)
文章代碼(AID): #1J5uhExO (java)