ผู้ประกอบการระดับบิตตีความยากแค่ไหน
ฉันตั้งโปรแกรมระบบฝังตัว ฉันฝึกฝนสิ่งนี้มามาก คำถามที่เชื่อมโยงของคุณเกี่ยวกับแผนที่แฮชพร้อมรหัส
static int hash(int h) {
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
ทำให้รู้สึกที่สมบูรณ์แบบกับฉันในเวลาประมาณตราบเท่าที่จะใช้ในการกำหนดรหัสออกเสียงดัง ๆ เหตุการณ์ที่อธิบายไว้bitCount
ชัดเจนทันที แต่ใช้เวลาสักครู่เพื่อคิดออกว่าเหตุใดจึงนับจำนวนจริง แม้ว่าความคิดเห็นจะดีมากและจะทำให้เข้าใจว่าโค้ดทำอะไรได้ยากกว่าปัญหาแฮชเล็กน้อย
การสร้างความแตกต่างระหว่างการอ่านและการทำความเข้าใจรหัสเป็นสิ่งสำคัญ ฉันสามารถตีความbitCount
รหัสและอ่านสิ่งที่มันทำ แต่พิสูจน์ว่าทำไมมันทำงานหรือแม้กระทั่งว่ามันจะใช้เวลาสักครู่ มีความแตกต่างระหว่างความสามารถในการอ่านโค้ดได้อย่างราบรื่นและความสามารถในการอ่านว่าทำไมโค้ดถึงเป็นแบบนั้น อัลกอริทึมบางอย่างนั้นยาก สิ่งที่ของhash
ความรู้สึกรหัสทำ แต่ความคิดเห็นอธิบายว่าทำไมสิ่งที่กำลังทำ อย่าท้อแท้ถ้าฟังก์ชั่นที่ใช้ตัวดำเนินการบิตเข้าใจยากพวกเขามักจะใช้ในการทำสิ่งที่ยุ่งยากทางคณิตศาสตร์ซึ่งจะยากไม่ว่ารูปแบบ
อุปมา
ฉันคุ้นเคยกับสิ่งนี้ วิชาหนึ่งที่ฉันไม่คุ้นเคยคือregex ฉันจัดการกับพวกเขาเป็นครั้งคราวในการสร้างสคริปต์ แต่ไม่เคยทำงานพัฒนารายวัน
ฉันรู้วิธีใช้องค์ประกอบต่อไปนี้ของ regex:
[]
คลาสของอักขระ
*
, .
และ+
สัญลักษณ์
- จุดเริ่มต้นของสตริง
^
และจุดสิ้นสุดของสตริง$
- คลาสอักขระ \ d, \ w และ \ s
- แฟล็ก / g
นี่เพียงพอที่จะสร้างคิวรีแบบง่ายและแบบสอบถามจำนวนมากที่ฉันเห็นไม่หลงทางจากจุดนี้
อะไรก็ตามที่ไม่อยู่ในรายการนี้ฉันไปถึงแผ่นโกง อะไรก็ตามยกเว้น{}
และ()
- แผ่นโกงจะไม่เพียงพอ ฉันรู้เพียงพอเกี่ยวกับคนเหล่านี้ที่จะรู้ว่าฉันจะต้องมีไวท์บอร์ดคู่มืออ้างอิงและอาจเป็นเพื่อนร่วมงาน คุณสามารถบรรจุอัลกอริธึมบ้า ๆ ไว้ใน regex สั้น ๆ สองสามบรรทัด
ในการออกแบบ regex ที่ต้องการหรือแนะนำอะไรที่ไม่ได้อยู่ในรายการองค์ประกอบที่รู้จักของฉันฉันจะแสดงรายการคลาสทั้งหมดของอินพุตที่ฉันคาดว่าจะรับรู้และใส่ไว้ในชุดทดสอบ ฉันจะสร้าง regex อย่างช้าๆและเพิ่มขึ้นมีขั้นตอนเป็นระยะ ๆ และทำตามขั้นตอนเหล่านี้เพื่อควบคุมแหล่งที่มาและ / หรือทิ้งไว้ในความคิดเห็นเพื่อให้ฉันสามารถเข้าใจสิ่งที่ควรจะเกิดขึ้นในภายหลังเมื่อแบ่ง หากอยู่ในรหัสการผลิตฉันจะทำให้แน่ใจว่าจะได้รับการตรวจสอบโดยผู้ที่มีประสบการณ์มากกว่า
นี่คือที่ที่คุณอยู่กับผู้ประกอบการระดับบิต?
ดังนั้นคุณต้องการที่จะโค้งมนอย่างดี?
ในการประมาณของฉันถ้าคุณสามารถตีความรหัสเช่นนี้ทำได้โดยการดึงกระดาษออกมาหรือไปที่ไวท์บอร์ดและวิ่งผ่านการปฏิบัติการด้วยตนเองคุณจะมีคุณสมบัติกลมกลืน หากต้องการมีคุณสมบัติเป็นโปรแกรมเมอร์ที่มีความรอบรู้ในด้านการดำเนินงานระดับบิตคุณควรจะสามารถทำสี่สิ่งต่อไปนี้:
สามารถอ่านและเขียนการดำเนินงานทั่วไปได้อย่างคล่องแคล่ว
สำหรับโปรแกรมเมอร์แอปพลิเคชันการดำเนินการทั่วไปที่มีตัวดำเนินการระดับบิตรวมถึงตัวดำเนินการพื้นฐานของ|
และ&
เพื่อตั้งค่าและล้างค่าสถานะ มันควรจะง่าย คุณควรจะสามารถอ่านและเขียนสิ่งที่ชอบ
open('file', O_WRONLY | O_APPEND | O_CREAT );
// Use an OR operator ^ here and ^ here to set multiple flags
โดยไม่ทำให้ช้าลง (สมมติว่าคุณรู้ว่าธงหมายถึงอะไร )
สามารถอ่านดำเนินงานที่ซับซ้อนมากขึ้นด้วยการทำงานบางอย่าง
บิตนับได้อย่างรวดเร็วจริงๆใน O (เข้าสู่ระบบ (n)) เวลาโดยไม่ต้องสาขาเพื่อให้มั่นใจว่าจำนวนของการชนกันใน hashcodes อาจแตกต่างกันตามจำนวนเงินที่ จำกัด และแยกที่อยู่อีเมล , หมายเลขโทรศัพท์หรือHTML ที่มี regex เป็นปัญหาที่ยาก มันสมเหตุสมผลสำหรับทุกคนที่ไม่ใช่ผู้เชี่ยวชาญในพื้นที่เหล่านี้เพื่อเข้าถึงไวท์บอร์ดมันไม่มีเหตุผลที่จะไม่สามารถเริ่มทำงานเพื่อทำความเข้าใจ
สามารถเขียนอัลกอริทึมที่ซับซ้อนด้วยการทำงานจำนวนมาก
หากคุณไม่ใช่ผู้เชี่ยวชาญคุณไม่ควรคาดหวังที่จะทำสิ่งที่ซับซ้อนและยาก อย่างไรก็ตามโปรแกรมเมอร์ที่ดีควรจะสามารถทำได้โดยทำงานอย่างต่อเนื่อง ทำสิ่งนี้ให้เพียงพอและในไม่ช้าคุณจะเป็นผู้เชี่ยวชาญ :)