Биттік операциялар – компьютердегі жеңіл, жылдам амал. Процессормен тікелей қолданылады, арифметикалық операциялардың негізі. Төмен қуат тұтынумен жұмыс істейді.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Компьютерлік ғылым тақырыбы
Computer science topic
Компьютерлік бағдарламалауда биттік операция биттік тізбек, биттік массив немесе екілік сан (биттік тізбек ретінде қарастырылады) деңгейінде, оның жеке биттерімен жұмыс істейді. Бұл жылдам және қарапайым амал, жоғары деңгейдегі арифметикалық операциялардың негізі және процессормен тікелей қолдау көрсетіледі. Көптеген биттік операциялар екі операндты нұсқаулар түрінде ұсынылады, онда нәтиже кіріс операндарының біреуін ауыстырады. Қарапайым, төмен құнмен процессорларда, әдетте, биттік операциялар бөлуден едәуір жылдам, көбейтуден бірнеше есе жылдам, ал кейде қосудан да жылдам болады. Қазіргі заманғы процессорлар ұзақ нұсқаулар құбырлары мен басқа архитектуралық шешімдерінің арқасында көбінесе қосу және көбейтуді биттік операциялармен бірдей жылдамдықпен орындайды, бірақ биттік операциялар ресурстарды аз пайдалануына байланысты көбінесе аз қуатты тұтынады.
In computer programming, a bitwise operation operates on a bit string, a bit array or a binary numeral (considered as a bit string) at the level of its individual bits. It is a fast and simple action, basic to the higher level arithmetic operations and directly supported by the processor. Most bitwise operations are presented as two operand instructions where the result replaces one of the input operands. On simple low cost processors, typically, bitwise operations are substantially faster than division, several times faster than multiplication, and sometimes significantly faster than addition. While modern processors usually perform addition and multiplication just as fast as bitwise operations due to their longer instruction pipelines and other architectural design choices, bitwise operations do commonly use less power because of the reduced use of resources.
Бит бойынша операторлар
Төмендегі түсіндірмелерде бит позициясының кез келген көрсеткіші оң жақтан (ең кіші маңызды) басталса, солға қарай есептеледі. Мысалы, 0001 екілік саны (ондық 1) бірінші (яғни, оң жақтағы) разрядында 1-ге ие, ал қалған разрядтары 0-ге тең.
In the explanations below, any indication of a bit's position is counted from the right (least significant) side, advancing left. For example, the binary value 0001 (decimal 1) has zeroes at every position but the first (i. e., the rightmost) one.
Біт ауысулары
Біттерді жылжыту кейде біттік операциялар деп есептеледі, себебі олар мәнді сандық шама ретінде емес, біттер тізбегі ретінде қарастырады. Мұндай операцияларда сандар солға немесе оңға жылжытылады. Компьютер процесорының регистрлерінің ені белгілі болғандықтан, бір жағынан кейбір биттер "сыртқа жылжытылады", ал екінші жағынан сол көлемдегі биттер "ішке жылжытылады"; біттерді жылжыту операторларының айырмашылығы жылжытылған биттердің мәнін қалай анықтайтындарында болады.
The bit shifts are sometimes considered bitwise operations, because they treat a value as a series of bits rather than as a numerical quantity. In these operations, the digits are moved, or shifted, to the left or right. Registers in a computer processor have a fixed width, so some bits will be "shifted out" of the register at one end, while the same number of bits are "shifted in" from the other end; the differences between bit shift operators lie in how they determine the values of the shifted in bits.
Логикалық ауысу
Логикалық өзгерісте, жойылған биттердің орнына нөлдер қосылады. Сондықтан логикалық және арифметикалық солға жылжытулар бірдей. Дегенмен, логикалық оңға жылжыту ең маңызды битке 0 мәнін қосады, белгі бітін көшірмейді, сондықтан ол белгісі жоқ екілік сандар үшін өте қолайлы, ал арифметикалық оңға жылжыту белгілі екілік сандардың екілік толықтыру түрі үшін өте қолайлы.
In a logical shift, zeros are shifted in to replace the discarded bits. Therefore, the logical and arithmetic left shifts are exactly the same. However, as the logical right shift inserts value 0 bits into the most significant bit, instead of copying the sign bit, it is ideal for unsigned binary numbers, while the arithmetic right shift is ideal for signed two's complement binary numbers.
Дөңгелекті ауысу
Жылжытудың тағы бір түрі – дөңгелек жылжу, биттік айналу немесе бит бойынша бұру.
Another form of shift is the circular shift, bitwise rotation or bit rotation.
Айналдыру
Бұл операция кейде "айналдыру көшірусіз" деп аталады, онда биттер тіркелгінің сол және оң жақтары біріктірілгендей "айналдырылады". Солға қарай жылжыту кезінде оңға жылжытылатын мән солға жылжытылып шығарылған мәнмен бірдей болады, ал оңға жылжыту операциясында керісінше. Бұл барлық қолданыстағы биттерді сақтап қалу қажет болғанда пайдалы және цифрлық криптографияда жиі қолданылады.
In this operation, sometimes called rotate no carry, the bits are "rotated" as if the left and right ends of the register were joined. The value that is shifted into the right during a left shift is whatever value was shifted out on the left, and vice versa for a right shift operation. This is useful if it is necessary to retain all the existing bits, and is frequently used in digital cryptography.
Ауыстыру арқылы айналдыру
Айналдыру арқылы жылжыту – айналдыру операциясының бір түрі, онда жылжытылатын бит (екі шетінде) тасымалдау туының бұрынғы мәні болып табылады, ал жылжытылып шығарылатын бит (екінші шетінде) тасымалдау туының жаңа мәніне айналады. Бір рет айналдыру арқылы жылжыту, тасымалдау туын алдын ала орнату арқылы бір позицияға логикалық немесе арифметикалық жылжытуды имитациялай алады. Мысалы, егер тасымалдау туы 0-ді қамтитын болса, онда x RIGHT ROTATE THROUGH CARRY BY ONE логикалық оңға жылжыту болады, ал егер тасымалдау туы таңба битінің көшірмесін қамтитын болса, онда x RIGHT ROTATE THROUGH CARRY BY ONE арифметикалық оңға жылжыту болады. Осы себепті, кейбір микроконтроллерлер, мысалы, төменгі деңгейдегі PIC процессорлары, тек айналдыру және айналдыру арқылы жылжыту мүмкіндіктерін ғана ұсынады, ал арифметикалық немесе логикалық жылжыту нұсқауларымен айналыспайды. Айналдыру арқылы жылжыту, процессордың негізгі сөз өлшемінен үлкен сандарды жылжыту кезінде ерекше пайдалы, себебі егер үлкен сан екі тіркегіште сақталса, бірінші тіркегіштің бір жағынан жылжытылған бит екінші тіркегіштің екінші жағынан кіруі керек. Айналдыру арқылы жылжыту мүмкіндігі арқасында, бұл бит бірінші жылжыту кезінде тасымалдау туында "сақталады" және екінші жылжыту кезінде қосымша дайындықсыз жылжытуға дайын болады.
Rotate through carry is a variant of the rotate operation, where the bit that is shifted in (on either end) is the old value of the carry flag, and the bit that is shifted out (on the other end) becomes the new value of the carry flag. A single rotate through carry can simulate a logical or arithmetic shift of one position by setting up the carry flag beforehand. For example, if the carry flag contains 0, then x RIGHT ROTATE THROUGH CARRY BY ONE is a logical right shift, and if the carry flag contains a copy of the sign bit, then x RIGHT ROTATE THROUGH CARRY BY ONE is an arithmetic right shift. For this reason, some microcontrollers such as low end PICs just have rotate and rotate through carry, and don't bother with arithmetic or logical shift instructions. Rotate through carry is especially useful when performing shifts on numbers larger than the processor's native word size, because if a large number is stored in two registers, the bit that is shifted off one end of the first register must come in at the other end of the second. With rotate through carry, that bit is "saved" in the carry flag during the first shift, ready to shift in during the second shift without any extra preparation.
Буль алгебрасы
Кейде біттік операциялардан құралған күрделі өрнектерді жаңайту пайдалы, мысалы, компилятор жазғанда. Компилятордың мақсаты – жоғары деңгейдегі бағдарламалау тілін мүмкіндігінше тиімді машиналық кодқа аудару. Күрделі біттік өрнектерді жаңайту үшін Буль алгебрасы қолданылады.
Sometimes it is useful to simplify complex expressions made up of bitwise operations, for example when writing compilers. The goal of a compiler is to translate a high level programming language into the most efficient machine code possible. Boolean algebra is used to simplify complex bitwise expressions.