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

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

3
ตัวดำเนินการ >>> = ใน C คืออะไร
ได้รับจากเพื่อนร่วมงานเป็นตัวต่อฉันไม่สามารถเข้าใจได้ว่าโปรแกรม C นี้รวบรวมและใช้งานได้อย่างไร >>>=ตัวดำเนินการนี้และ1P1ตัวอักษรแปลกคืออะไร ฉันได้ทำการทดสอบใน Clang และ GCC แล้ว ไม่มีคำเตือนและผลลัพธ์คือ "???" #include <stdio.h> int main() { int a[2]={ 10, 1 }; while( a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ] ) printf("?"); return 0; }

19
การคูณและการหารโดยใช้โอเปอเรเตอร์กะใน C เร็วขึ้นจริงหรือ
การคูณและการหารสามารถทำได้โดยใช้ตัวดำเนินการบิตตัวอย่างเช่น i*2 = i<<1 i*3 = (i<<1) + i; i*10 = (i<<3) + (i<<1) และอื่น ๆ จริง ๆ แล้วมันเร็วกว่าการใช้พูด(i<<3)+(i<<1)เพื่อคูณกับ 10 กว่าการใช้i*10โดยตรงหรือไม่ มีอินพุตอะไรบ้างที่ไม่สามารถคูณหรือหารด้วยวิธีนี้ได้?


1
เร็วกว่า bit-shift สองเท่าสำหรับ Python 3.x จำนวนเต็ม?
ฉันดูที่แหล่งที่มาของsort_containersและรู้สึกประหลาดใจที่เห็นบรรทัดนี้ : self._load, self._twice, self._half = load, load * 2, load >> 1 นี่loadคือจำนวนเต็ม เหตุใดจึงใช้การเลื่อนบิตในที่เดียวและการคูณในที่อื่น ดูเหมือนว่าเหตุผลที่การเลื่อนบิตอาจเร็วกว่าการหารหนึ่งด้วย 2 แต่ทำไมไม่เปลี่ยนการคูณด้วยการเลื่อนด้วย? ฉันเปรียบเทียบกรณีต่อไปนี้: (คูณหาร) (กะกะ) (ครั้งกะ) (กะหาร) และพบว่า # 3 นั้นเร็วกว่าตัวเลือกอื่น ๆ เสมอ: # self._load, self._twice, self._half = load, load * 2, load >> 1 import random import timeit import pandas as pd x …

7
โอเปอเรเตอร์ JavaScript >>> คืออะไรและคุณใช้งานอย่างไร?
ฉันดูโค้ดจาก Mozilla ที่เพิ่มวิธีการกรองลงใน Array และมีบรรทัดของรหัสที่ทำให้ฉันสับสน var len = this.length >>> 0; ฉันไม่เคยเห็น >>> ใช้ใน JavaScript มาก่อน มันคืออะไรและมันทำอะไร?


3
ทำไม 11010100 << 1 เท่ากับ 110101000 ไม่ใช่ 10101000
ทำไมเมื่อฉันพยายามที่จะเปลี่ยนบิตสำหรับ 11010100 2ผลที่ได้คือ 110,101,000 2ไม่ 10101000 2 int a = Integer.parseInt("11010100", 2) &lt;&lt; 1; ฉันพยายามทำสิ่งนี้: int a = (byte)(Integer.parseInt("11010100", 2) &lt;&lt; 1); แต่ถ้ามูลค่าส่งออกมากกว่า 128 ทุกอย่างจะถูกลบซึ่งเป็นตรรกะ ฉันจะทำให้จำนวนบิตนั้นไม่เปลี่ยนแปลงได้อย่างไร
40 java  bit-shift 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.