Кіріспе
Компьютерлік бағдарламалаудағы деректер құрылымы. Бит өрісі – белгілі бір мақсаттар үшін бөлінген бір немесе бірнеше іргелес биттерден тұратын деректер құрылымы, сондықтан құрылымдағы кез келген битті немесе биттер тобын орнатуға немесе тексеруге болады. Бит өрісі көбінесе белгілі, біт ені бекітілген бүтін типтерді, мысалы, бір биттік логикалық мәндерді көрсету үшін қолданылады. Өрістегі жеке биттердің мағынасын бағдарламашы анықтайды; мысалы, бит өрісінің бірінші биті (өрістің базалық мекенжайында орналасқан) кейде бит өрісімен байланысты белгілі бір атрибуттың күйін анықтау үшін қолданылады. Процессорлар мен басқа логикалық құрылғыларда бит өрістерінің жиынтығы, яғни флагтар, әдетте белгілі бір операцияларды басқару немесе олардың нәтижесін көрсету үшін қолданылады. Процессорларда флагтардан тұратын статус тіркелгісі болады. Мысалы, егер қосылған сан нәтижесін көрсетуге болмаса, арифметикалық ағып кету флагі қойылады. Флагтар келесі операцияларды шешу үшін қолданылуы мүмкін, мысалы, шартты секіру командаларын. Мысалы, x86 ассемблер тіліндегі JE (Jump if Equal) командасы, егер Z (нөл) флагі алдыңғы операцияда қойылған болса, секіруді орындайды. Бит өрісі, биттік массивтен өзгеше, өйткені соңғысы бүтін сандармен индексацияланған үлкен көлемдегі биттерді сақтау үшін қолданылады және көбінесе тіл қолдайтын кез келген бүтін типтен кеңірек болады. Ал бит өрістері әдетте машиналық сөздің ішіне сыяды. C тілінде, туған нұсқауда анықталған бит өрістерін int, unsigned int, signed int, Bool (C99-да), BitInt(N), unsigned BitInt(N) (C23-де) немесе басқа туған нұсқауда анықталған типтерді пайдаланып жасауға болады. C++ тілінде оларды кез келген бүтін немесе санау типін пайдаланып жасауға болады; көптеген C компиляторлары да мұны қабылдайды. Бұл жағдайда бағдарламашы бит өрісі үшін бірнеше қосалқы өрістердің енін анықтайтын және белгілейтін құрылымды жариялай алады. Бір типті көршілес жарияланған бит өрістері компилятормен жадты үнемдеу үшін азайтылған сандағы сөздерге жинақталады, егер әрбір "өріс" жеке жарияланған болса, одан көп жад қажет болар еді. Туған бит өрістері жоқ тілдер үшін немесе бағдарламашы нәтижедегі биттік ұсынылымды басқаруды қаласа, үлкен сөз типіндегі биттерді қолмен өңдеуге болады. Бұл жағдайда бағдарламашы маскалау және биттік операциялардың комбинацияларын пайдаланып, өрістегі биттерді орнатуға, тексеруге және өзгертуге болады.
A bit field is a data structure that consists of one or more adjacent bits which have been allocated for specific purposes, so that any single bit or group of bits within the structure can be set or inspected. A bit field is most commonly used to represent integral types of known, fixed bit width, such as single bit Booleans. The meaning of the individual bits within the field is determined by the programmer; for example, the first bit in a bit field (located at the field's base address) is sometimes used to determine the state of a particular attribute associated with the bit field. Within CPUs and other logic devices, collections of bit fields called flags are commonly used to control or to indicate the outcome of particular operations. Processors have a status register that is composed of flags. For example, if the result of an addition cannot be represented in the destination an arithmetic overflow is set. The flags can be used to decide subsequent operations, such as conditional jump instructions. For example, a JE (Jump if Equal) instruction in the x86 assembly language will result in a jump if the Z (zero) flag was set by some previous operation. A bit field is distinguished from a bit array in that the latter is used to store a large set of bits indexed by integers and is often wider than any integral type supported by the language. Bit fields, on the other hand, typically fit within a machine word,
In C, native implementation defined bit fields can be created using int, unsigned int, signed int, Bool (in C99), BitInt(N), unsigned BitInt(N) (in C23) or other implementation defined types. In C++, they can be created using any integral or enumeration type; most C compilers also allow this. In this case, the programmer can declare a structure for a bit field which labels and determines the width of several subfields. Adjacently declared bit fields of the same type can then be packed by the compiler into a reduced number of words, compared with the memory used if each 'field' were to be declared separately. For languages lacking native bit fields, or where the programmer wants control over the resulting bit representation, it is possible to manually manipulate bits within a larger word type. In this case, the programmer can set, test, and change the bits in the field using combinations of masking and bitwise operations.
Байрақ сөздердегі биттерді өзгерту
Жазу, оқу немесе флагтардағы биттерді өзгерту тек OR, AND және NOT операцияларын пайдаланып жасалуы мүмкін – процессорда жылдам орындалатын операциялар. Битті қою үшін, күй байтын маска байтымен OR операциясын жасаңыз. Маска байтында немесе күй байтындағы кез келген қойылған биттер нәтижеде қойылған болады. Битті ауыстыру үшін, күй байтын және маска байтын XOR операциясын жасаңыз. Бұл бит өшірілген болса, оны қояды немесе қойылған болса, өшіреді.