คำถามติดแท็ก bit-manipulation

การจัดการของแต่ละบิต ตัวดำเนินการที่ใช้อาจประกอบด้วยค่าบิตและ AND, OR, XOR, NOT, กะซ้ายและขวากะ


9
ตัวดำเนินการเปลี่ยนแปลงระดับบิต (bit-shift) คืออะไรและทำงานอย่างไร
ฉันพยายามเรียนรู้ C ในเวลาว่างและภาษาอื่น ๆ (C #, Java และอื่น ๆ ) มีแนวคิดเดียวกัน (และบ่อยครั้งที่ผู้ให้บริการรายเดียวกัน) ... สิ่งที่ฉันสงสัยคือในระดับหลักสิ่งที่ไม่บิตขยับ ( <<, >>, >>>) ทำสิ่งที่เป็นปัญหาก็สามารถช่วยแก้ปัญหาและสิ่งที่ gotchas แฝงตัวอยู่รอบโค้งหรือไม่ ในคำอื่น ๆ คู่มือเริ่มต้นที่แน่นอนในการขยับเล็กน้อยในทุกความดีของมัน

30
จะนับจำนวนบิตที่ตั้งค่าเป็นจำนวนเต็ม 32 บิตได้อย่างไร?
8 บิตที่เป็นตัวแทนของหมายเลข 7 มีลักษณะดังนี้: 00000111 ตั้งสามบิต อัลกอริทึมในการกำหนดจำนวนบิตที่ตั้งไว้ในจำนวนเต็ม 32- บิตคืออะไร?

23
“ ส่วนประกอบของ 2” คืออะไร
ผมอยู่ในระบบคอมพิวเตอร์หลักสูตรและได้รับการดิ้นรนในส่วนหนึ่งกับสองของส่วนประกอบ ฉันต้องการที่จะเข้าใจ แต่ทุกอย่างที่ฉันอ่านไม่ได้นำมารวมกันเพื่อฉัน ฉันอ่านบทความวิกิพีเดียและบทความอื่น ๆ รวมถึงหนังสือเรียนด้วย ดังนั้นฉันต้องการเริ่มโพสต์วิกิชุมชนนี้เพื่อกำหนดว่า Complement ของ Two คืออะไรวิธีการใช้และวิธีที่จะมีผลกับตัวเลขระหว่างการดำเนินการเช่น cast (จากการเซ็นชื่อเป็น unsigned และกลับกัน), bit-wise และ bit-shift . สิ่งที่ฉันหวังไว้คือคำจำกัดความที่ชัดเจนและรัดกุมซึ่งโปรแกรมเมอร์สามารถเข้าใจได้ง่าย

5
การแตกบิตด้วยการคูณเดียว
ผมเห็นเป็นเทคนิคที่น่าสนใจนำมาใช้ในการให้คำตอบให้กับคำถามอื่นและต้องการที่จะเข้าใจมันเล็ก ๆ น้อย ๆ ที่ดีกว่า เราได้รับจำนวนเต็ม 64- บิตที่ไม่ได้ลงชื่อและเราสนใจบิตต่อไปนี้: 1.......2.......3.......4.......5.......6.......7.......8....... โดยเฉพาะเราต้องการย้ายพวกเขาไปยังตำแหน่งแปดอันดับแรกเช่น: 12345678........................................................ เราไม่สนใจเกี่ยวกับคุณค่าของบิตที่ระบุโดย.และพวกเขาไม่จำเป็นต้องเก็บรักษาไว้ วิธีการแก้ปัญหา0x2040810204081คือการหน้ากากออกบิตที่ไม่พึงประสงค์และคูณผลโดย นี่เป็นเคล็ดลับ วิธีนี้เป็นวิธีทั่วไป? สามารถใช้เทคนิคนี้เพื่อแยกบิตย่อยใด ๆ ได้หรือไม่? ถ้าไม่วิธีหนึ่งคิดออกว่าวิธีการทำงานสำหรับชุดบิตเฉพาะหรือไม่ สุดท้ายเราจะหาตัวคูณที่ถูกต้องเพื่อแยกบิตที่กำหนดได้อย่างไร

26
อัลกอริทึมที่มีประสิทธิภาพสำหรับการกลับบิต (จาก MSB-> LSB ถึง LSB-> MSB) ใน C
อัลกอริทึมที่มีประสิทธิภาพที่สุดคืออะไร 0010 0000 => 0000 0100 การแปลงมาจาก MSB-> LSB เป็น LSB-> MSB บิตทั้งหมดจะต้องย้อนกลับ; นั่นคือนี่คือไม่ใช่ endianness-swapping

10
การดำเนินการ C # bitwise ที่ใช้กันทั่วไปส่วนใหญ่
สำหรับชีวิตของฉันฉันจำไม่ได้ว่าจะตั้งลบสลับหรือทดสอบบิตในบิตฟิลด์ ฉันไม่แน่ใจหรือผสมกันเพราะฉันไม่ค่อยต้องการสิ่งเหล่านี้ ดังนั้น "บิตโกงแผ่น" น่าจะมี ตัวอย่างเช่น: flags = flags | FlagsEnum.Bit4; // Set bit 4. หรือ if ((flags & FlagsEnum.Bit4)) == FlagsEnum.Bit4) // Is there a less verbose way? คุณสามารถยกตัวอย่างการดำเนินงานทั่วไปอื่น ๆ ทั้งหมดโดยเฉพาะอย่างยิ่งในไวยากรณ์ C # โดยใช้ [Flags] enum หรือไม่


6
ใช้ bitwise หรือ 0 เพื่อปูพื้นตัวเลข
เพื่อนร่วมงานของฉันสะดุดเมื่อวิธีการตั้งค่าตัวเลขลอยพื้นโดยใช้บิตหรือ: var a = 13.6 | 0; //a == 13 เรากำลังพูดถึงมันและสงสัยบางสิ่ง มันทำงานยังไง? ทฤษฏีของเราคือการใช้โอเปอเรเตอร์ดังกล่าวปลดจำนวนให้เป็นจำนวนเต็มดังนั้นจึงลบส่วนที่เป็นเศษส่วน มันมีข้อดีมากกว่าการทำMath.floorหรือไม่? อาจเร็วกว่านี้ไหม? (เล่นสำนวนไม่ได้ตั้งใจ) มันมีข้อเสียหรือไม่? อาจจะไม่ได้ผลในบางกรณี? ความชัดเจนเป็นสิ่งที่ชัดเจนเนื่องจากเราต้องหาและฉันก็เขียนคำถามนี้ ขอบคุณ

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 และฉันพบการปิดบังเล็กน้อย บางคนสามารถอธิบายแนวคิดและหน้าที่ทั่วไปของการปิดบังบิตให้ฉันได้หรือไม่ ตัวอย่างชื่นชมมาก

25
การปัดเศษขึ้นเป็นกำลังต่อไปของ 2
ฉันต้องการเขียนฟังก์ชั่นที่คืนค่ากำลังสองถัดไปที่ใกล้ที่สุด ตัวอย่างเช่นถ้าอินพุตของฉันคือ 789 ผลลัพธ์ควรเป็น 1024 มีวิธีใดบ้างที่จะบรรลุผลนี้โดยไม่ใช้ลูปใด ๆ แต่ใช้ตัวดำเนินการระดับบิต?


9
C # int เป็นไบต์ []
ฉันจำเป็นต้องแปลงintไปเป็นวิธีหนึ่งในการทำก็คือการใช้งานbyte[] BitConverter.GetBytes()แต่ฉันไม่แน่ใจว่าสิ่งที่ตรงกับข้อกำหนดต่อไปนี้: จำนวนเต็ม XDR ที่ลงนามคือ datum 32 บิตที่เข้ารหัสจำนวนเต็มในช่วง [-2147483648,2147483647] จำนวนเต็มถูกแทนด้วยเครื่องหมายเสริมสองอัน ไบต์ที่สำคัญที่สุดและน้อยที่สุดคือ 0 และ 3 ตามลำดับ จำนวนเต็มถูกประกาศดังนี้: ที่มา: RFC1014 3.2 ฉันจะแปลง int เป็น byte ที่จะตอบสนองข้อกำหนดข้างต้นได้อย่างไร
172 c#  .net  bit-manipulation  nfs 

11
~ x + ~ y == ~ (x + y) เป็นเท็จเสมอหรือไม่
รหัสนี้ประเมินว่าเป็นเท็จเสมอหรือไม่ ตัวแปรทั้งสองเป็นส่วนเสริมที่มีการลงนามของทั้งสอง ~x + ~y == ~(x + y) ฉันรู้สึกว่าควรมีจำนวนที่ตรงกับเงื่อนไข ฉันลองทดสอบตัวเลขระหว่าง-5000และ5000ไม่เคยประสบความเท่าเทียมกัน มีวิธีการตั้งค่าสมการเพื่อหาคำตอบให้กับเงื่อนไขหรือไม่? การสลับหนึ่งรายการสำหรับอีกรายการหนึ่งจะทำให้เกิดข้อบกพร่องที่ร้ายกาจในโปรแกรมของฉันหรือไม่

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