Octal is easier to write down quickly, but hexadecimal has the nice pr dịch - Octal is easier to write down quickly, but hexadecimal has the nice pr Việt làm thế nào để nói

Octal is easier to write down quick

Octal is easier to write down quickly, but hexadecimal has the nice properties of breaking easily into bytes (which are pairs of hexadecimal digits).

Some aids for remembering the correspondence of hexadecimal (often called 'hex') digits and their decimal digit counterpart:

hex 0-9 are the same as decimal digits 0-9
A is the first one past 9 and is easy to remember as 10
F is the last one and thus easy to remember as 15
C is decimal 12 (the only one that you sort of have to memorize)
All the rest are close to A, C, or F (B is just A+1, D is C+1, E is F-1)
If someone mentions the "third bit" of a number, its best to find out if they mean third bit from the left or from the right and whether they start counting from 0 or 1. A miscommunication can result in real problems laster on (i.e., reversed strings of bits!). This page, for example, starts counting with the rightmost bit being number 1. This page is a gem in that answer 5 counts from the right starting at 1, while answer 8 counts from the right starting at 0.

Almost all modern computers use the left-most bit as the 'sign bit' which signifies a negative integer if its value is 1. Note that identifying the location of the sign bit requires knowledge of precisely how many bits are in a given data type. This number can change over time (i.e., when you recompile on a different computer). Generally, the sizeof() operator will tell you the number of bytes (which are generally 8 bits) its argument contains, e.g., sizeof(int) or sizeof (100) will yield 4 on a 32-bit machine. Sometimes one can identify a system-based include file that contains the proper constants if a program must depend on a certain word (integer) length.

Operating on Binary Numbers in Programs

Sometimes it is handy to work with the bits stored in numbers rather than just treating them as integers. Examples of such times include remembering choices (each bit slot can be a 'yes'/'no' indicator), keeping track of option flags (same idea, really, each bit slot is a 'yes'/'no' indicator for a flag's presence), or keeping track of a number of small integers (e.g., successive pairs of bit slots can remember numbers from 0..3). Of course, occasionally programming tasks actually contain 'bit strings'.

In C/C++ and others, assigning a binary number is easy if you know its octal or hexadecimal representation:

i = 0x9AD5A2AB; /* hexadecimal: 0x */
or

i = 023265321253; /* octal: start with 0 */
More often, a pair of single-bit valued integers is combined to create an integer of interest. One might think the statement below would do that:

i = 0x10000 + 0x100;
and it will -- until the sign bit enters the picture or the same bit is combined twice:

i = 0x100 + 0x100;
In that case, a 'carry' occurs (0x100 + 0x100 = 0x200 which is probably not the result you want) and then i contains 0x200 instead of 0x100 as probably desired. The 'or' operation -- denoted as '|' in C/C++ and others -- does the right thing. It combines corresponding bits in its two operands using these four rules:

0 | 0 -> 0
0 | 1 -> 1
1 | 0 -> 1
1 | 1 -> 1
The '|' operation is called 'bitwise or' in C so as not to be confused with it's cousin '||' called 'logical or' or 'orif'. The '||' operator evaluates the arithmetic value of its left side operand and, if that value is false (exactly 0), it evaluates its right side operand. The 'orif' operator is different: if either operand is nonzero, then '||' evaluates to true (exactly 1 in C).

It is "1 | 1 = 1" that distinguishes the '|' operator from '+'. Sometimes operators like this are displayed as a 'truth table':

right operand
operator | | 0 1
---+------
left 0 | 0 1

It's easy to see that the 'bitwise or' operation is a way to set
bits inside an integer. A '1' results with either or both of the
input bits are '1'.

The easy way to query bits is using the 'logical and' (also known
as 'bitwise and') operator which is denoted as '&' and has this
truth table:

& | 0 1
---+------
0 | 0 0
1 | 0 1
Do not confuse the single '&' operator with its partner named 'andif' with two ampersands ('&&'). The 'andif' operator will evaluate its left side and yield 0 if the left side is false, without evaluating its right side operand. Only if the left side is true will the right side be evaluated, and the result of the operator is the logical 'and' of their truth values (just as above) and is evaluated to either the integer 0 or the integer 1 (vs. '&' which would yield 4 when evaluating binary 100100 & 000111).

A '1' results only when both input bits are '1'. So, if a program wishes to know if the 0x100 bit is '1' in an integer, the if statement is simple:

if (a & 0x100) { printf("yes, 0x100 is onn"); }
C/C++ (and others) contain additional operators, including 'exclusive or' (denoted '^') with this truth table:

^ | 0 1
---+------
0 | 0 1
1 | 1 0
The 'exclusive or' operator is sometimes called 'xor', for easy of typing. Xor yields a '1' either exactly one of its inputs is one: either one or the other, but not both. This operator is very handy for 'toggling' (flipping) bits, changing them from '1' to '0' or vice-versa. Consider this statement:

a = a ^ 0x100; /* same as a ^= 0x100; */
The 0x100 bit will be changed from 0->1 or 1->0, depending on its current value.

Switching off a bit requires two operators. The new one is the unary operator that toggles every bit in a word, creating what is called the 'bitwise complement' or just 'complement' of a word. Sometimes this is called 'bit inversion' or just 'inversion' and is denoted by the tilde: '~'. Here's a quick example:

char a, b; /* eight bits, not 32 or 64 */
a = 0x4A; /* binary 0100.1010 */
b = ~a; /* flip every bit: 1011.0101 */
printf("b is 0x%Xn", b);
which yields:

b is 0xB5
Thus, if we have a single bit switched on (e.g., 0x100) then ~0x100 has all but one bit switched on: 0xFFFFFEFF (note the 'E' as the third 'digit' from the right) (this example shows a 32-bit value; a 64-bit value would have a lot more F's on the front).

These two operators combine to create a scheme for switching off bits:

a = a & (~0x100); /* switch off the 0x100 bit */
/* same as a &= ~0x100;
since all but one bit in ~0x100 is on, all the bits except the 0x100 bits appear in the result. Since the 0x100 bit is 'off' in ~0x100, that bit is guaranteed to be '0' in the result. This operation is universally called 'masking' as in 'mask off the 0x100 bit'.

Summary

In summary, these operators enable setting, clearing, toggling, and testing any bit or combination of bits in an integer:

a |= 0x20; /* turn on bit 0x20 */
a &= ~0x20; /* turn off bit 0x20 */
a ^= 0x20; /* toggle bit 0x20 */
if (a & 0x20) {
/* then the 0x20 bit is on */
}

#### Shifting

Moving bits to the left or right is called 'shift'ing. Consider a
five-bit binary number like 00110. If that number is shifted one
bit left, it becomes: 01100. On the other hand, if 00110 is shift
one bit to the right, it becomes 000011. Mathematically inclined
users will realize that shifting to the left one bit is the same
as multiplying by 2 while shifting to the right one bit is usually
the same as an integer divide by 2 (i.e., one discards any remainder).
Why usually? Shifting -1 right by one yields an unusual result (i.e,,
0xFFFF.FFFF >> 1 == 0xFFFF.FFFF, no change at all).

Generally, one can specify a shift by more than one bit: Shifting
000001 to the left by three bits yields 001000. The shift operators
are:

a > n /* shift a right n bits
One generally shifts integers (instead of floating-point numbers), although nothing prevents shifting floating point numbers in some languages. The results are generally very difficult to interpret as a floating point number, of course.

When shifting to the left, 0's are inserted in the lower end. When shifting to the right, the high order bit is duplicated and inserted for the newly-needed bit (thus preserving the number's sign). This means that (-1)>>1 yields -1 instead of 0!

Another type of shift, unavailable natively in most programming languages is the 'circular' shift, where bits shifted off one end are inserted at the other end instead of the default 0. Modern uses of this operation are rare but could appear occasionally. Some machines (e.g., the x86 architecture) have assembly-language instructions for this, but the prudent C or Java programming will spend a few more machine cycles (billionths of a second) to execute both a shift and then a bit-extract-shift-or combination to move the bit themselves.

A note on optimization: some zealous optimizing coders like to change a/4 to '(a>>2)' in order to save time ("since multiplies can be slow"). Modern compilers know all about this and perform such substitutions automatically, thus leaving the better programmer to write a/4 when that is what's meant.

Very Advanced Bit Manipulation

Skip this section if this is your first time dealing with bits. Read it at your leisure in the future after you've written some bit manipulation code. Really.

It turns out that the way 2's complement machines represent integers and the way they implement subtraction (the standard on virtually all modern machines) yields some very interesting possibilities for bit manipulation.

Two's complement machines represent positive integers as the binary representation of that integer with a 0 in the sign bit. A negative integer is represented as the complement of the positive integer (including turning on the sign bit) plus 1. Thus, the absolute value of the most negative representable integer is one more than the most positive representable integer. Thus:

x +x in 8-bit binary -x in 8-bit binary
0 0000 0000 0000 0000
1 000
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
Octal là dễ dàng hơn để ghi lại một cách nhanh chóng, nhưng hệ thập lục phân có các thuộc tính tốt đẹp của phá vỡ một cách dễ dàng vào byte (mà là cặp của chữ số thập lục phân).Một số viện trợ cho ghi nhớ các thư từ hệ thập lục phân (thường được gọi là ' hex') chữ số và chữ số thập phân đối tác của họ:hex 0-9 là giống như chữ số 0-9A là người đầu tiên qua 9 và là dễ nhớ như 10F là cuối cùng và do đó dễ nhớ như 15C là thập phân 12 (chỉ có một mà bạn loại phải ghi nhớ)Tất cả phần còn lại là gần gũi với A, C, hoặc F (B là chỉ một + 1, D là C + 1, E là F-1)Nếu ai đó đề cập đến "bit thứ ba" của một số, tốt nhất của mình để tìm nếu họ có ý nghĩa chút thứ ba từ trái hoặc từ bên phải và cho dù họ bắt đầu đếm từ 0 hoặc 1. Một hiểu lầm có thể gây ra các vấn đề thực tế laster ngày (tức là, đảo ngược chuỗi bit!). Trang này, ví dụ, bắt đầu đếm với bìa phải chút là số 1. Trang này là một đá quý trong đó trả lời 5 tính từ bên phải bắt đầu từ 1, trong khi trả lời 8 đếm từ bên phải bắt đầu lúc 0.Hầu như tất cả các máy tính hiện đại sử dụng chút trái-hầu hết là 'đăng chút' nghĩa là một số nguyên tiêu cực nếu giá trị của nó là 1. Lưu ý rằng việc xác định vị trí của chút dấu hiệu đòi hỏi kiến thức về chính xác bao nhiêu bit trong một loại dữ liệu nhất định. Con số này có thể thay đổi theo thời gian (ví dụ, khi bạn biên dịch trên một máy tính khác nhau). Nói chung, các nhà điều hành sizeof() sẽ cho bạn biết số byte (đó là thường 8 bit) đối số của nó có chứa, ví dụ như, sizeof(int) hoặc sizeof (100) sẽ mang lại 4 trên một máy 32-bit. Đôi khi một trong những có thể xác định một tập tin dựa trên hệ thống bao gồm có chứa các hằng số thích hợp nếu một chương trình phải phụ thuộc vào một số chiều dài từ (số nguyên).Hoạt động trên số nhị phân trong chương trìnhĐôi khi nó là tiện dụng để làm việc với các bit lưu trữ số lượng chứ không phải là chỉ cần điều trị cho họ như là số nguyên. Ví dụ như vậy bao gồm ghi nhớ sự lựa chọn (mỗi khe cắm bit có thể là một 'có' / 'không' chỉ số), theo dõi các tùy chọn cờ (ý tưởng tương tự, thực sự, mỗi khe cắm chút là một 'có' / 'không' chỉ báo cho sự hiện diện của một lá cờ), hoặc theo dõi của một số các số nguyên nhỏ (ví dụ, nối tiếp nhau đôi chút khe có thể nhớ con số từ 0..3). Tất nhiên, đôi khi lập trình công việc thực sự chứa 'bit dây'.Trong C/c ++ và những người khác, việc phân công một số nhị phân là dễ dàng nếu bạn biết đại diện bát phân hoặc thập lục phân của nó: Tôi = 0x9AD5A2AB; / * hệ thập lục phân: 0 x * /hoặc Tôi = 023265321253; / * bát phân: bắt đầu với 0 * /Thường xuyên hơn, một cặp đơn-bit có giá trị số nguyên kết hợp để tạo ra một số nguyên quan tâm. Một có thể nghĩ rằng các báo cáo dưới đây sẽ làm điều đó: Tôi = 0x10000 + 0x100;và nó sẽ... cho đến khi chút dấu hiệu vào hình ảnh hoặc cùng một chút kết hợp hai lần: Tôi = 0x100 + 0x100;Trong trường hợp đó, một thực hiện xảy ra (0x100 + 0x100 = 0x200 mà có lẽ không phải là kết quả bạn muốn) và sau đó tôi có 0x200 thay vì 0x100 như có thể mong muốn. Các hoạt động 'hoặc'--ký hiệu như ' |' trong C/c ++ và những người khác - không đúng. Nó kết hợp tương ứng bit trong của nó operands hai bằng cách sử dụng các quy tắc 4: 0 | -> 0 0 0 | 1 -> 1 3 > 0 -> 1 3 > 1 -> 1Các ' |' hoạt động được gọi là ' bitwise hoặc ' trong C để không làm được nhầm lẫn với nó là người Anh em họ ' ||' được gọi là ' hợp lý hoặc ' hay 'orif'. Các ' ||' nhà điều hành đánh giá giá trị số học của operand bên trái của nó và, nếu giá trị đó là sai (chính xác 0), nó đánh giá của nó operand bên phải. Các nhà điều hành 'orif' là khác nhau: nếu một trong hai operand là nonzero, sau đó ' ||' đánh giá đúng sự thật (chính xác 1 đô).Nó là "1 | 1 = 1" mà phân biệt các ' |' nhà điều hành từ '+'. Đôi khi nhà khai thác như thế này được hiển thị như là một 'sự thật bảng': đúng operandnhà điều hành || 0 1 ---+------ còn lại 0 | 0 1Nó rất dễ dàng để thấy rằng các ' bitwise hoặc ' hoạt động là một cách để thiết lậpbit bên trong một số nguyên. '1' kết quả với một trong hai hoặc cả hai của cácđầu vào bit là '1'.Một cách dễ dàng để truy vấn bit sử dụng các ' hợp lý và ' (còn gọias 'bitwise and') operator which is denoted as '&' and has thistruth table: & | 0 1 ---+------ 0 | 0 0 1 | 0 1Do not confuse the single '&' operator with its partner named 'andif' with two ampersands ('&&'). The 'andif' operator will evaluate its left side and yield 0 if the left side is false, without evaluating its right side operand. Only if the left side is true will the right side be evaluated, and the result of the operator is the logical 'and' of their truth values (just as above) and is evaluated to either the integer 0 or the integer 1 (vs. '&' which would yield 4 when evaluating binary 100100 & 000111).A '1' results only when both input bits are '1'. So, if a program wishes to know if the 0x100 bit is '1' in an integer, the if statement is simple: if (a & 0x100) { printf("yes, 0x100 is onn"); }C/C++ (and others) contain additional operators, including 'exclusive or' (denoted '^') with this truth table: ^ | 0 1 ---+------ 0 | 0 1 1 | 1 0The 'exclusive or' operator is sometimes called 'xor', for easy of typing. Xor yields a '1' either exactly one of its inputs is one: either one or the other, but not both. This operator is very handy for 'toggling' (flipping) bits, changing them from '1' to '0' or vice-versa. Consider this statement: a = a ^ 0x100; /* same as a ^= 0x100; */The 0x100 bit will be changed from 0->1 or 1->0, depending on its current value.Switching off a bit requires two operators. The new one is the unary operator that toggles every bit in a word, creating what is called the 'bitwise complement' or just 'complement' of a word. Sometimes this is called 'bit inversion' or just 'inversion' and is denoted by the tilde: '~'. Here's a quick example: char a, b; /* eight bits, not 32 or 64 */ a = 0x4A; /* binary 0100.1010 */ b = ~a; /* flip every bit: 1011.0101 */ printf("b is 0x%Xn", b);which yields: b is 0xB5Thus, if we have a single bit switched on (e.g., 0x100) then ~0x100 has all but one bit switched on: 0xFFFFFEFF (note the 'E' as the third 'digit' from the right) (this example shows a 32-bit value; a 64-bit value would have a lot more F's on the front).These two operators combine to create a scheme for switching off bits: a = a & (~0x100); /* switch off the 0x100 bit */ /* same as a &= ~0x100;since all but one bit in ~0x100 is on, all the bits except the 0x100 bits appear in the result. Since the 0x100 bit is 'off' in ~0x100, that bit is guaranteed to be '0' in the result. This operation is universally called 'masking' as in 'mask off the 0x100 bit'.SummaryIn summary, these operators enable setting, clearing, toggling, and testing any bit or combination of bits in an integer: a |= 0x20; /* turn on bit 0x20 */ a &= ~0x20; /* turn off bit 0x20 */ a ^= 0x20; /* toggle bit 0x20 */ if (a & 0x20) { /* then the 0x20 bit is on */ }

#### Shifting

Moving bits to the left or right is called 'shift'ing. Consider a
five-bit binary number like 00110. If that number is shifted one
bit left, it becomes: 01100. On the other hand, if 00110 is shift
one bit to the right, it becomes 000011. Mathematically inclined
users will realize that shifting to the left one bit is the same
as multiplying by 2 while shifting to the right one bit is usually
the same as an integer divide by 2 (i.e., one discards any remainder).
Why usually? Shifting -1 right by one yields an unusual result (i.e,,
0xFFFF.FFFF >> 1 == 0xFFFF.FFFF, no change at all).

Generally, one can specify a shift by more than one bit: Shifting
000001 to the left by three bits yields 001000. The shift operators
are:

a > n /* shift a right n bits
One generally shifts integers (instead of floating-point numbers), although nothing prevents shifting floating point numbers in some languages. The results are generally very difficult to interpret as a floating point number, of course.

When shifting to the left, 0's are inserted in the lower end. When shifting to the right, the high order bit is duplicated and inserted for the newly-needed bit (thus preserving the number's sign). This means that (-1)>>1 yields -1 instead of 0!

Another type of shift, unavailable natively in most programming languages is the 'circular' shift, where bits shifted off one end are inserted at the other end instead of the default 0. Modern uses of this operation are rare but could appear occasionally. Some machines (e.g., the x86 architecture) have assembly-language instructions for this, but the prudent C or Java programming will spend a few more machine cycles (billionths of a second) to execute both a shift and then a bit-extract-shift-or combination to move the bit themselves.

A note on optimization: some zealous optimizing coders like to change a/4 to '(a>>2)' in order to save time ("since multiplies can be slow"). Modern compilers know all about this and perform such substitutions automatically, thus leaving the better programmer to write a/4 when that is what's meant.

Very Advanced Bit Manipulation

Skip this section if this is your first time dealing with bits. Read it at your leisure in the future after you've written some bit manipulation code. Really.

It turns out that the way 2's complement machines represent integers and the way they implement subtraction (the standard on virtually all modern machines) yields some very interesting possibilities for bit manipulation.

Two's complement machines represent positive integers as the binary representation of that integer with a 0 in the sign bit. A negative integer is represented as the complement of the positive integer (including turning on the sign bit) plus 1. Thus, the absolute value of the most negative representable integer is one more than the most positive representable integer. Thus:

x +x in 8-bit binary -x in 8-bit binary
0 0000 0000 0000 0000
1 000
đang được dịch, vui lòng đợi..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
Octal là dễ dàng hơn để viết ra một cách nhanh chóng, nhưng thập lục phân có các thuộc tính tốt đẹp của phá vỡ dễ dàng vào byte (trong đó có cặp chữ số thập lục phân). Một số viện trợ để ghi nhớ sự tương ứng của hệ thập lục phân (thường được gọi là 'hex') chữ số và chữ số thập phân đối tác của họ: hex 0-9 cũng giống như chữ số thập phân 0-9 A là người đầu tiên qua 9 và dễ nhớ là 10 F là người cuối cùng và do đó dễ nhớ như 15 C là số thập phân 12 (chỉ có một mà bạn sắp xếp của phải ghi nhớ) Tất cả còn lại là gần với A, C, hoặc F (B chỉ là A + 1, D là C + 1, E là F-1) Nếu ai đó nhắc đến các "bit thứ ba" của một số, nó tốt nhất để tìm hiểu xem họ có nghĩa là bit thứ ba từ bên trái hay bên cánh phải và liệu họ bắt đầu đếm từ 0 hoặc 1. Một hiểu lầm có thể dẫn đến các vấn đề thực laster trên (tức là đảo ngược chuỗi các bit!). Trang này, ví dụ, bắt đầu đếm với bit ngoài cùng bên phải là số 1. Trang này là một viên ngọc trong đó câu trả lời 5 đếm từ bên phải bắt đầu từ 1, trong khi câu trả lời 8 đếm từ bên phải bắt đầu từ 0. Hầu như tất cả các máy tính hiện đại sử dụng bên trái là bit là 'dấu hiệu' bit đó có nghĩa là một số nguyên âm nếu giá trị của nó là 1. Lưu ý rằng việc xác định vị trí của các bit dấu hiệu đòi hỏi kiến thức chính xác có bao nhiêu bit là trong một kiểu dữ liệu nhất định. Con số này có thể thay đổi theo thời gian (ví dụ, khi bạn biên dịch trên một máy tính khác nhau). Nói chung, sizeof () điều hành sẽ cho bạn biết số lượng byte (thường là 8 bit) đối số của nó chứa, ví dụ như, sizeof (int) hoặc sizeof (100) sẽ mang lại 4 trên một máy 32-bit. Đôi khi người ta có thể xác định một tập tin bao gồm hệ thống dựa trên có chứa các hằng số thích hợp nếu một chương trình phải phụ thuộc vào một từ nào đó (số nguyên) chiều dài. Hoạt động trên số nhị phân trong các chương trình Đôi khi nó là tiện dụng để làm việc với các bit được lưu trữ với số lượng hơn là chỉ đối xử với họ như là số nguyên. Ví dụ về các lần như vậy bao gồm các lựa chọn ghi nhớ (mỗi khe bit có thể là một 'yes' / 'no' chỉ số), theo dõi các tùy chọn lá cờ (cùng ý tưởng, thực sự, mỗi khe bit là 'yes' / 'no' chỉ số cho một sự hiện diện của lá cờ), hoặc lưu giữ theo dõi của một số các số nguyên nhỏ (ví dụ, cặp kế tiếp của khe bit có thể nhớ số từ 0..3). . Tất nhiên, nhiệm vụ đôi khi lập trình thực sự có chứa 'chuỗi bit' Trong C / C ++ và những người khác, chỉ định một số nhị phân là dễ dàng nếu bạn biết bát phân của mình hoặc đại diện thập lục phân: i = 0x9AD5A2AB; / * Thập lục phân: 0x * / hoặc i = 023265321253; / * Bát phân: bắt đầu bằng 0 * / Thông thường, một đôi duy nhất-bit có giá trị số nguyên được kết hợp để tạo ra một số nguyên quan tâm. Người ta có thể nghĩ rằng những tuyên bố dưới đây sẽ làm điều đó: i = 0x10000 + 0x100; và nó sẽ - cho đến khi bit dấu hiệu bước vào bức tranh hoặc các bit cùng được kết hợp hai lần: i = 0x100 + 0x100; Trong trường hợp đó, một 'mang' xảy ra (0x100 + 0x100 = 0x200 mà có lẽ không phải là kết quả bạn muốn) và sau đó tôi có chứa 0x200 0x100 thay vì như lẽ mong muốn. Các 'hoặc' hoạt động - ký hiệu là '|' trong C / C ++ và những người khác - không đúng. Nó kết hợp các bit tương ứng trong hai toán hạng của nó bằng cách sử dụng bốn nguyên tắc: 0 | 0 -> 0 0 | 1 -> 1 1 | 0 -> 1 1 | 1 -> 1 Sự '|' hoạt động được gọi là 'bitwise hoặc' trong C để không bị nhầm lẫn với nó là anh em họ '||' gọi là 'logic hoặc' hoặc 'orif'. Các '||' nhà điều hành đánh giá các giá trị số học của phụ tử bên trái của nó, và nếu giá trị đó là sai (chính xác là 0), nó đánh giá bên toán hạng phải. Các 'orif' hành là khác nhau: nếu một trong hai toán hạng là khác không, sau đó '||' để đánh giá đúng (chính xác là 1 trong C). Đó là "1 | 1 = 1" mà phân biệt các '|' hành từ '+'. Đôi khi các nhà khai thác như thế này được hiển thị như là một "chân lý bảng ': toán hạng phải điều hành | | 0 1 --- + ------ trái 0 | 0 1 Thật dễ dàng để thấy rằng các hoạt động 'bitwise hoặc' là một cách để thiết lập các bit bên trong một số nguyên. Kết quả A '1' với một trong hai hoặc cả hai bit đầu vào là '1'. Cách dễ dàng để truy vấn bit được sử dụng "logic và '(còn được gọi là 'bitwise và') điều hành được ký hiệu là '&' và có này bảng sự thật: & | 0 1 --- + ------ 0 | 0 0 1 | 0 1 Đừng nhầm lẫn giữa '&' điều hành duy nhất với đối tác của mình có tên là 'andif' với hai ký hiệu và ('&&') . Các 'andif' nhà điều hành sẽ đánh giá mặt trái của nó và mang lại 0 nếu phía bên trái là sai, mà không đánh giá bên toán hạng phải. Chỉ khi bên trái là đúng sự thật sẽ ở bên phải được đánh giá, và kết quả của các nhà điều hành là hợp lý 'và' các giá trị chân lý của họ (chỉ như trên) và được đánh giá là một trong hai số nguyên 0 hoặc 1 số nguyên (vs. '&' mà sẽ mang lại 4 khi đánh giá nhị phân 100.100 & 000.111). kết quả A '1' chỉ khi cả hai bit đầu vào là '1'. Vì vậy, nếu một chương trình muốn biết nếu bit 0x100 là '1' trong một số nguyên, nếu tuyên bố là đơn giản: nếu (a & 0x100) {printf ("yes, 0x100 là onn"); } C / C ++ (và những người khác) chứa các toán bổ sung, bao gồm cả 'độc quyền hoặc' (ký hiệu là '^') với bảng sự thật này: ^ | 0 1 --- + ------ 0 | 0 1 1 | 1 0 Những 'độc quyền hoặc' điều hành đôi khi được gọi là "xor", để dễ dàng đánh máy. Xor mang lại một '1' hoặc là chính xác một trong những yếu tố đầu vào của nó là một: hoặc là một hay khác, nhưng không phải cả hai. Nhà điều hành này là rất tiện dụng cho 'toggling' (flipping) bit, thay đổi họ từ '1' để '0' hoặc ngược lại. Hãy xem xét tuyên bố này: a = a ^ 0x100; / * Giống như a ^ = 0x100; * / Các bit 0x100 sẽ được thay đổi từ 0-> 1 hoặc 1-> 0, tùy theo giá trị hiện tại của nó. Tắt một chút yêu cầu hai nhà khai thác. Các mới là toán tử đơn mà Toggles mỗi bit trong một từ, tạo ra những gì được gọi là "bổ sung bitwise 'hay chỉ là' bổ sung 'của một từ. Đôi khi điều này được gọi là "Đảo ngược bit 'hay chỉ là' đảo ngược 'và được ký hiệu bằng dấu ngã:' ~ '. Dưới đây là một ví dụ nhanh: char a, b; / * Tám bit, không phải 32 hay 64 * / a = 0x4A; / * Nhị phân 0100.1010 * / b = ~ a; / * Lật từng bit: 1011.0101 * / printf ("b là 0x% Xn", b); trong đó sản lượng: b là 0xB5 Vì vậy, nếu chúng ta có một chút đơn bật (ví dụ, 0x100) sau đó ~ 0x100 có tất cả, nhưng một bit bật: 0xFFFFFEFF (lưu ý các 'E' trong giới thứ ba 'chữ số' từ bên phải) (ví dụ này cho thấy một giá trị 32-bit; một giá trị 64-bit sẽ có nhiều hơn F về phía trước). Hai nhà khai thác kết hợp để tạo ra một chương trình cho tắt bit: a = a & (~ 0x100); / * Tắt bit 0x100 * / / * giống như một & = ~ 0x100; vì tất cả nhưng một chút trong ~ 0x100 là, tất cả các bit trừ các bit 0x100 xuất hiện trong kết quả. Kể từ khi bit 0x100 'tắt' trong ~ 0x100, bit đó là đảm bảo được '0' trong kết quả. . Hoạt động này được phổ gọi là 'mặt nạ' như trong 'mặt nạ bit 0x100' Tóm tắt Tóm lại, các nhà khai thác enable thiết lập, thanh toán bù trừ, chuyển đổi qua lại, và thử nghiệm bất kỳ bit hoặc sự kết hợp của các bit trong một số nguyên: a | = 0x20; / * Bật bit 0x20 * / a & = ~ 0x20; / * Tắt bit 0x20 * / a ^ = 0x20; / * Toggle bit 0x20 * / if (a & 0x20) { / * sau đó các bit 0x20 là trên * / } #### Chuyển bit di chuyển sang trái hoặc phải được gọi là 'shift'ing. Hãy xem xét một số nhị phân lăm-bit như 00110. Nếu con số đó được chuyển một chút bên trái, nó trở thành: 01100. Mặt khác, nếu 00.110 là chuyển một chút về bên phải, nó sẽ trở thành 000011. Về mặt toán học nghiêng người dùng sẽ nhận ra rằng chuyển bên trái một chút là giống như nhân với 2 khi chuyển sang bên phải một chút thường giống như một số nguyên chia cho 2 (tức là, một trong những loại bỏ bất kỳ phần còn lại). Tại sao thường? Chuyển -1 quyền bởi một mang lại một kết quả bất thường (tức là ,, 0xFFFF.FFFF >> 1 == 0xFFFF.FFFF, không thay đổi ở tất cả). Nói chung, người ta có thể chỉ định một sự thay đổi bởi nhiều hơn một chút: Chuyển 000001 bên trái bởi ba bit mang 001000. Các nhà khai thác dịch chuyển là: a> n / * chuyển quyền n bit Một thường chuyển số nguyên (thay vì số dấu chấm động), mặc dù không có gì ngăn cản chuyển số dấu chấm động trong một số ngôn ngữ. Các kết quả nói chung là rất khó để giải thích như là một số điểm nổi, tất nhiên. Khi chuyển sang bên trái, 0 của được chèn vào cuối thấp hơn. Khi chuyển sang bên phải, các bit bậc cao được nhân đôi và chèn vào cho các bit mới cần thiết (do đó giữ được dấu của số). Điều này có nghĩa là (-1) >> 1 suất -1 thay vì 0! Một loại thay đổi, không có sẵn tự nhiên trong hầu hết các ngôn ngữ lập trình là thay đổi 'tròn', nơi mà các bit chuyển ra khỏi một đầu được chèn vào cuối khác thay vì mặc định 0. sử dụng hiện đại của hoạt động này là rất hiếm nhưng có thể thỉnh thoảng xuất hiện. Một số máy (ví dụ, các kiến trúc x86) có hướng dẫn lắp ráp ngôn ngữ cho điều này, nhưng C thận trọng hoặc lập trình Java sẽ dành một vài chu kỳ máy hơn (một phần tỷ giây) để thực hiện cả một sự thay đổi và sau đó một chút-chiết-shift -Hoặc kết hợp để di chuyển các bit bản thân. Một lưu ý về tối ưu hóa: một số lập trình tối ưu hóa nhiệt tâm muốn thay đổi một / 4 để '(a >> 2) để tiết kiệm thời gian ("kể từ khi nhân lên có thể được làm chậm"). Biên dịch hiện đại biết tất cả về điều này và thực hiện thay thế như tự động, do đó để lại các lập trình viên tốt hơn để viết / 4 khi đó là những gì có nghĩa là. Rất chi tiết Bit Manipulation Bỏ qua phần này nếu đây là lần đầu tiên của bạn đối phó với bit. Đọc nó lúc giải trí của bạn trong tương lai sau khi bạn đã viết một số mã thao tác bit. Thực sự. Nó chỉ ra rằng máy đường 2 của bổ sung đại diện cho số nguyên và cách thức họ thực hiện phép trừ (các tiêu chuẩn trên hầu như tất cả các máy móc hiện đại) sản lượng một số khả năng rất thú vị cho các thao tác bit. Hai của máy bổ sung đại diện cho số nguyên dương là biểu diễn nhị phân của số nguyên với một số 0 vào bit dấu. Một số nguyên âm được biểu diễn như là phần bù của các số nguyên dương (bao gồm cả chuyển về bit dấu) cộng với 1. Như vậy, giá trị tuyệt đối của số nguyên biểu diễn tiêu cực nhất là một nhiều hơn số nguyên biểu diễn tích cực nhất. Như vậy: x + x 8-bit nhị phân -x trong 8-bit nhị phân 0 0000 0000 0000 0000 1 000






































































































































đang được dịch, vui lòng đợi..
 
Các ngôn ngữ khác
Hỗ trợ công cụ dịch thuật: Albania, Amharic, Anh, Armenia, Azerbaijan, Ba Lan, Ba Tư, Bantu, Basque, Belarus, Bengal, Bosnia, Bulgaria, Bồ Đào Nha, Catalan, Cebuano, Chichewa, Corsi, Creole (Haiti), Croatia, Do Thái, Estonia, Filipino, Frisia, Gael Scotland, Galicia, George, Gujarat, Hausa, Hawaii, Hindi, Hmong, Hungary, Hy Lạp, Hà Lan, Hà Lan (Nam Phi), Hàn, Iceland, Igbo, Ireland, Java, Kannada, Kazakh, Khmer, Kinyarwanda, Klingon, Kurd, Kyrgyz, Latinh, Latvia, Litva, Luxembourg, Lào, Macedonia, Malagasy, Malayalam, Malta, Maori, Marathi, Myanmar, Mã Lai, Mông Cổ, Na Uy, Nepal, Nga, Nhật, Odia (Oriya), Pashto, Pháp, Phát hiện ngôn ngữ, Phần Lan, Punjab, Quốc tế ngữ, Rumani, Samoa, Serbia, Sesotho, Shona, Sindhi, Sinhala, Slovak, Slovenia, Somali, Sunda, Swahili, Séc, Tajik, Tamil, Tatar, Telugu, Thái, Thổ Nhĩ Kỳ, Thụy Điển, Tiếng Indonesia, Tiếng Ý, Trung, Trung (Phồn thể), Turkmen, Tây Ban Nha, Ukraina, Urdu, Uyghur, Uzbek, Việt, Xứ Wales, Yiddish, Yoruba, Zulu, Đan Mạch, Đức, Ả Rập, dịch ngôn ngữ.

Copyright ©2025 I Love Translation. All reserved.

E-mail: