คำถามติดแท็ก bitwise-operators

ตัวดำเนินการที่ใช้ในการจัดการในระดับบิตภาษาการเขียนโปรแกรมเป็นแบบไบต์ในขณะที่ฮาร์ดแวร์เน้นบิตดังนั้นความสามารถในการทำงานในระดับบิตจึงมีความสำคัญมากในการเขียนโปรแกรมโดยเฉพาะอย่างยิ่งเมื่อโปรแกรมโต้ตอบกับฮาร์ดแวร์โดยตรง .


30
กรณีการใช้งานจริงของผู้ประกอบการระดับบิต [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ กรณีการใช้งานจริงของผู้ประกอบการระดับบิตต่อไปนี้มีอะไรบ้าง และ แฮคเกอร์ ไม่ หรือ เลื่อนไปทางซ้าย / ขวา

28
ทำไมเราถึงใช้ | | มากกว่า | อะไรคือความแตกต่าง?
ฉันแค่สงสัยว่าทำไมเรามักจะใช้ตรรกะหรือ||ระหว่างสองบูลีนไม่ได้บิตหรือ|แม้ว่าพวกเขาทั้งสองทำงานได้ดี ฉันหมายถึงดูที่ต่อไปนี้: if(true | true) // pass if(true | false) // pass if(false | true) // pass if(false | false) // no pass if(true || true) // pass if(true || false) // pass if(false || true) // pass if(false || false) // no pass เราสามารถใช้|แทนได้||หรือไม่ สิ่งเดียวกันกับและ&&&

1
ความหมายของ double tilde (~~) ใน Java คืออะไร?
เมื่อเรียกดูซอร์สโค้ดของ Guava ฉันพบรหัสต่อไปนี้ (ส่วนหนึ่งของการนำไปใช้hashCodeสำหรับคลาสภายในCartesianSet): int adjust = size() - 1; for (int i = 0; i < axes.size(); i++) { adjust *= 31; adjust = ~~adjust; // in GWT, we have to deal with integer overflow carefully } int hash = 1; for (Set<E> axis : axes) { hash = …

2
Bit Masking คืออะไร
ฉันค่อนข้างใหม่สำหรับการเขียนโปรแกรม C และฉันพบการปิดบังเล็กน้อย บางคนสามารถอธิบายแนวคิดและหน้าที่ทั่วไปของการปิดบังบิตให้ฉันได้หรือไม่ ตัวอย่างชื่นชมมาก


13
ความแตกต่างระหว่าง & และ & & ใน Java คืออะไร?
ฉันคิดเสมอว่า&&ตัวดำเนินการใน Java ใช้สำหรับตรวจสอบว่าตัวถูกดำเนินการบูลีนtrueหรือไม่และตัว&ดำเนินการใช้ในการดำเนินการบิตฉลาดในสองจำนวนเต็ม เมื่อเร็ว ๆ นี้ฉันรู้ว่า&ตัวดำเนินการสามารถใช้ตรวจสอบว่าตัวถูกดำเนินการบูลีนtrueความแตกต่างเพียงอย่างเดียวที่จะตรวจสอบตัวถูกดำเนินการ RHS แม้ว่าตัวถูกดำเนินการ LHS เป็นเท็จ ตัว&ดำเนินการใน Java โอเวอร์โหลดอยู่ภายในหรือไม่ หรือมีแนวคิดอื่น ๆ ที่อยู่เบื้องหลังเรื่องนี้?

9
แปลงเป็นเลขฐานสองและเก็บค่าศูนย์นำหน้าใน Python
ฉันพยายามแปลงจำนวนเต็มเป็นไบนารีโดยใช้ฟังก์ชัน bin () ใน Python อย่างไรก็ตามมันจะลบค่าศูนย์นำหน้าซึ่งฉันต้องการจริง ๆ เสมอดังนั้นผลลัพธ์จะเป็น 8 บิตเสมอ: ตัวอย่าง: bin(1) -> 0b1 # What I would like: bin(1) -> 0b00000001 มีวิธีทำเช่นนี้หรือไม่?

13
เป็นการดีที่จะใช้ตัวดำเนินการ xor สำหรับการตรวจสอบบูลีนหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน10 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ ผมเองชอบแต่เพียงผู้เดียวหรือ , ^ผู้ประกอบการเมื่อมันทำให้ความรู้สึกในบริบทของการตรวจสอบแบบบูลเพราะความกระชับของตน ฉันชอบเขียนมาก if (boolean1 ^ boolean2) { //do it } กว่า if((boolean1 && !boolean2) || (boolean2 && !boolean1)) { //do it } แต่บ่อยครั้งที่ฉันรู้สึกสับสนจากนักพัฒนา Java คนอื่น (ไม่ใช่เฉพาะมือใหม่) และบางครั้งก็แสดงความคิดเห็นว่าควรใช้สำหรับการทำงานระดับบิตได้อย่างไร ฉันอยากรู้วิธีปฏิบัติที่ดีที่สุดเกี่ยวกับการใช้งานของ^ผู้ให้บริการ

12
ภาษาใดบ้างที่มีโอเปอเรเตอร์การสลับบูลีนแบบเอกนารี?
นี่เป็นคำถามเชิงทฤษฎีมากกว่า C ++ และภาษา (ใน) ขึ้นอยู่กับมันโดยตรง (Java, C #, PHP) มีตัวดำเนินการทางลัดสำหรับการกำหนดผลลัพธ์ของตัวดำเนินการไบนารีส่วนใหญ่ให้กับตัวถูกดำเนินการแรกเช่น a += 3; // for a = a + 3 a *= 3; // for a = a * 3; a <<= 3; // for a = a << 3; แต่เมื่อฉันต้องการสลับนิพจน์บูลีนฉันมักพบว่าตัวเองเขียนอะไรบางอย่างเช่น a = !a; ซึ่งน่ารำคาญเมื่อaมีการแสดงออกยาวเช่น this.dataSource.trackedObject.currentValue.booleanFlag = !this.dataSource.trackedObject.currentValue.booleanFlag; (ใช่กฎหมายของ …

15
วิธีการสร้างการแจกแจง bitmask สไตล์ NS_OPTIONS ใน Swift
ในเอกสารประกอบของ Apple เกี่ยวกับการโต้ตอบกับ C APIs พวกเขาอธิบายถึงวิธีNS_ENUMการระบุการแจกแจงแบบ C ที่ทำเครื่องหมายด้วยวิธีเป็น Swift enumerations สิ่งนี้สมเหตุสมผลและเนื่องจากมีการระบุ enumerations ใน Swift เป็นenumประเภทค่าจึงง่ายต่อการดูวิธีการสร้างของเราเอง นอกจากนี้ยังกล่าวถึงNS_OPTIONSตัวเลือก C-style ที่มีเครื่องหมาย: Swift ยังนำเข้าตัวเลือกที่มีเครื่องหมายNS_OPTIONSแมโคร ในขณะที่ตัวเลือกลักษณะการทำงานคล้ายจะ enumerations นำเข้าตัวเลือกยังสามารถรองรับการดำเนินงานบางบิตเช่น&, และ| ~ใน Objective-C คุณหมายถึงชุดตัวเลือกที่ว่างเปล่าที่มีค่าคงที่เป็นศูนย์ ( 0) ใน Swift ใช้nilเพื่อแสดงการไม่มีตัวเลือกใด ๆ ระบุว่าไม่มีoptionsประเภทค่าใน Swift เราจะสร้างตัวแปรตัวเลือก C-Style เพื่อทำงานได้อย่างไร

9
ตัวดำเนินการระดับบิตคืออะไร?
ฉันเป็นคนที่เขียนโค้ดเพื่อความสนุกสนานและไม่ได้เจาะลึกลงไปในสภาพแวดล้อมทางวิชาการหรือวิชาชีพดังนั้นสิ่งต่างๆเช่นตัวดำเนินการระดับบิตเหล่านี้จึงหนีฉันไป ฉันกำลังอ่านบทความเกี่ยวกับ JavaScript ซึ่งเห็นได้ชัดว่ารองรับการทำงานแบบบิต ฉันมักจะเห็นการดำเนินการนี้กล่าวถึงในสถานที่ต่างๆและฉันพยายามอ่านเพื่อหาว่ามันคืออะไรกันแน่ แต่ดูเหมือนจะไม่เข้าใจเลย แล้วพวกเขาคืออะไร? ตัวอย่างชัดเจนจะดีมาก! : D คำถามเพิ่มเติมอีกสองสามข้อ - การใช้งานบิตไวซ์มีอะไรบ้าง คุณจะใช้เมื่อใด


4
ผลของตัวดำเนินการ Bitwise บนบูลีนใน Java
ตัวดำเนินการระดับบิตควรจะเดินทางตัวแปรและดำเนินการทีละนิด ในกรณีของจำนวนเต็ม longs ตัวอักษรนี้เหมาะสม ตัวแปรเหล่านี้สามารถมีค่าเต็มช่วงบังคับตามขนาด อย่างไรก็ตามในกรณีของบูลีนบูลีนสามารถมีได้เพียงสองค่าเท่านั้น 1 = จริงหรือ 0 = เท็จ แต่ไม่ได้กำหนดขนาดของบูลีน อาจมีขนาดใหญ่เท่าไบต์หรือเล็กหน่อยก็ได้ แล้วผลของการใช้ตัวดำเนินการแบบบิตต่อบูลีนคืออะไร? JVM แปลเป็นตัวดำเนินการตรรกะปกติและดำเนินการต่อไปหรือไม่? มันถือว่าบูลีนเป็นเอนทิตีบิตเดียวสำหรับวัตถุประสงค์ของการดำเนินการหรือไม่? หรือผลลัพธ์ไม่ได้กำหนดพร้อมกับขนาดของบูลีน?

3
อะไร | = (ท่อเดียวเท่ากับ) และ & = (เครื่องหมายเดียวและเท่ากับ) หมายถึงอะไร
ในบรรทัดด้านล่าง: //Folder.Attributes = FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly; Folder.Attributes |= FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly; Folder.Attributes |= ~FileAttributes.System; Folder.Attributes &= ~FileAttributes.System; อะไร|=(ท่อเดียวเท่ากับ) และ&=(เดี่ยวเครื่องหมายเท่ากับ) เฉลี่ยใน C # ฉันต้องการลบแอตทริบิวต์ระบบที่มีการรักษาคนอื่น ๆ ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.