Bitwise operators include: | bitwise OR or, & bitwise AND and, ^ bitwise XOR or XOR ,~ Not, <left shift,> right shift, and so on. This article describes the application of the bitwise operator in C. It mainly includes:
○ Hexadecimal conversion
※Convert decimal to binary.
※Convert binary to decimal.
○ | Bitwise OR operator
○ & Bitwise AND Operators
○ ^ Bitwise OR operator
※^ Returns the number of two equal or equal bits.
※^ Bitwise XOR encryption is used.
○ ~ Inverse Operators
○ X <n left shift operator
○ X> N right shift operator
Hexadecimal conversion
Because bitwise operations are performed on a binary basis, hexadecimal conversion is the prerequisite for bitwise operations.
□Convert decimal to binary
For example, to convert the decimal number 783 into a binary number, follow the following 10 steps.
Concatenate the remainder from bottom to top, that is, the binary value of 783, that is, 1100001111.
In C #, if it is of the int16 type, it indicates that there is a 16-bit integer number. For 783, if it is expressed as int16, if it is less than 16 bits, it is necessary to add 0 in front, that is, to add 6 0 in 1100001111, the complete expression is: 0000001100001111. In the same way, if it is int32 type, It means there are 32-bit integer numbers.
How can I convert-783 to a binary value of the int16 type?
→We know that the binary value of positive number 783 expressed as int16 is: 0000001100001111
→ Invert at each position, that is, if it is 1, it becomes 0, and vice versa. After reversing, it becomes: 1111110011110000.
→Add 1 to 1111110011110001
□Convert binary to decimal
For example, to convert int16 binary number 0000000100010110 to decimal number, go through the following 16 steps.
From the right to the left, multiply by the N power of 2 in turn.
Add all the results together:
0 + 2 + 4 + 0 + 16 + 0 + 0 + 256 + 0 = 2 + 4 + 16 + 256 = 278
Therefore, the decimal number of 0000000100010110 is 278.
How can we convert a negative binary number of the int16 type into a decimal number?
For example, there is a binary number: 1111111111010011 (int16 type, the first is the number 1 to indicate a negative number, and the first is the number 0 to represent a positive number)
→ The reverse direction at each position is: 0000000000101100
→ After calculation, the resulting decimal number is: 44
→ Add 1 to get: 45
→ Convert it to a negative number and get:-45.
| Bitwise OR operator
Assume that the Decimal Numbers 38 and 53 are bitwise OR calculated.
→After calculation, the Binary Expression of the decimal number 38 is 00100110, And the Binary Expression of the decimal number 538 is 00110101.
→For | bitwise OR operator, if one of the two binary numbers is 1, the result is 1.
→ Convert the obtained 00110111 to decimal: 55
If C # is used:
byte result = 38 | 53;
& Bitwise AND operator
Assume that the decimal number is 76 and 231 in bitwise AND calculation.
→After calculation, the Binary Expression of the decimal number 76 is 01001100, And the Binary Expression of the decimal number 231 is 11100111.
→For & bitwise AND operators, the result is 0 if one of the two binary numbers is 0.
→ Convert the obtained 01000100 to the decimal value: 68.
If C # is used:
byte result = 76 & 231;
^ Bitwise OR operator
Assume that decimal numbers 138 and 43 are bitwise AND calculated.
→After calculation, the Binary Expression of decimal number 138 is 10001010, And the Binary Expression of decimal number 43 is 00101011.
→For the ^ bitwise OR operator, when the binary numbers of the two operators are different, the result is 1.
→ Convert the obtained 10100001 to decimal: 161.
If C # is used:
byte result = 138 ^ 43 ;
□Example 1: Use ^ bitwise XOR or exchange 2 numbers
int x = 4;
int y = 6;
x ^= y;
y ^= x;
x ^= y;
Console.WriteLine(x); //6
Console.WriteLine(y); //4
The above process is as follows:
(1) x ^ = Y, equivalent to X = x ^ y
The binary value of X is: 00100.
The binary value of Y is: 00110.
Returns 00010 if X is different from Y.
After X is converted to decimal, X is: 2
(2) y ^ = x, equivalent to Y = y ^ x
The binary value of Y is: 00110.
The binary value of X is: 00010.
Y and X are different or, and the result is: 00100
After converting y to decimal, Y is: 4
(3) x ^ = Y, equivalent to X = x ^ y
The binary value of X is: 00010.
The binary value of Y is: 00100.
Returns 00110 if X is different from Y.
After X is converted to decimal, X is 6
□Example 2: Use ^ bitwise XOR or for encryption
String MSG = "this is the string I want to encrypt ";
string k = "mypassword";
for(int i = 0; i < msg.Length; i++)
{
sb.Append((char)(msg[i] ^ k[i % k.Length]));
}
Console.WriteLine(sb.ToString());
~ Inverse Operators
Assume that the decimal number 52 is used for Inverse calculation.
→After calculation, the Binary Expression of the decimal number 52 is 00110100
→ ~ For the inverse operator, the binary number is reversed by bit, and 0 is changed to 0.
→ Convert the obtained 11001011 to decimal: 203.
If C # is used:
byte result = ~52;
X <n left shift operator
Each person moves n places to the left, and the right vacancy position is 0.
Assume that the decimal number is 154 shifted to the left.
If C # is used:
byte b1 = 154;
byte b2 = (byte)b1 << 1;
Console. writeline (B2); // The result is 52, and the binary value is 00110100.
X> N right shift operator
Each person moves n places to the right, and the left vacant position is 0.
Assume that the decimal number 155 is shifted to the right.
If C # is used:
byte b1 = 155;
byte b2 = (byte)(b1 >> 1);
Console. writeline (B2); // result: 77
Summary:
| For bitwise OR operators, if one of the two binary numbers is 1, the result is 1.
& For bitwise AND operators, if one of the two binary numbers is 0, the result is 0.
^ For bitwise OR operators, when the binary numbers of the two operators are different, the result is 1.
~ For the inverse operator, the binary number is reversed by bit, and 0 is changed to 0.
X <n left shift operator. Each operator moves N bits to the left, and the right vacant position is supplemented by 0.
X> N shift right operator. Each operator moves n places to the right, and the left vacant position is 0.
References:
Swapping of variables without third variable using XOR logic
Understand how bitwise operators work
Http://baike.baidu.com/view/9895739.htm? Fr = Aladdin