- 2022-04-07 22:28
*views 3*- C Language
- C Language operator

Today, we will learn about the lower bit operators .

Today we should also study in a happy mood !

<>1. What operators are there ? How to use it ?

& Bitwise AND ： Bitwise operation with 1 by 1, Others are 0

| Bitwise OR : Bitwise operation with 0 by 0, Others are 1

^ Bitwise XOR ： Bitwise operation The difference is 1, Same as 0

~ Reverse ： Bitwise operation Bitwise inversion （ unary operator ）

<< Shift left ： Bit by bit left shift least bit complement 0

>> Shift right ： Shift right bit by bit with sign to fill the highest sign bit , Unsigned complement 0.

except ~ Reverse , The others are binocular operators .

<>2. What data types do bit operators apply to ?

The answer is only for plastic families , Not suitable for floating point family .

The essential reason is that the data storage types of the two are different .

The storage of the plastic family was mentioned in the previous article , No more details .

* Shaping family storage

Storage mode of floating point family , To comply with IE754 Provisions of .

<>3. Bitwise AND Bitwise OR Bitwise XOR Instance of

<> example 1： Find binary middle 1 Number of . adopt &（ Bitwise AND ）

int a = 0; scanf("%d", &a); int count = 0; while (a) { a = a&(a - 1);

// Discard the lowest bit each time , until a by 0. count++; } printf("%d\n", count);

<> example 2： Find binary middle 0 Number of adopt | （ Bitwise OR ）,（ Very interesting , You can have a look ）

int a = 0; int count = 0; scanf("%d", &a); while (a+1) { a = a | (a + 1); count

++; } printf("%d\n", count);

This code is very interesting , The judgment condition is established by truncating after data overflow .

first , Used in judgment a+1 Because to make 0 Go in, too , More coincidentally , When a+1 equal to 0 When , just a yes -1, We know -1 Is not in the binary complement of 0 of

, So it just fits , This is used to change one bit at a time into 1, Make the data negative in the end （-1）, Add 1 Become 0, Terminate cycle .

<> example 3： adopt ^ （ Bitwise XOR ） Swap the values of two variables .

First of all, we need to know some basic conclusions ：

1 . A number exclusive or 0, Or is it itself .

2. A number XOR is itself 0

This is based on the XOR concept .

Let's look at this question again , Have you got some ideas .

before a XOR b, And then XOR again , Equivalent to b = b^ b^a.

By the same token a.

int a = 10; int b = 20; printf("before:%d %d\n", a, b); a = a^b; b = a^b; a = a

^b; printf("after:%d %d\n", a, b);

Here's the math .

int a = 10; int b = 20; printf("before:%d %d\n", a, b); a = a + b; b = a - b; a

= a - b; printf("after:%d %d\n", a, b);

The biggest advantage of XOR method over mathematical method is that it does not need to consider the problem of overflow , If two very large numbers are operated mathematically, they may overflow .

<>4. Shift left Shift right operator

Shift left is simple , Discard high bit , Low complement 0.

Right shift sub case discussed :

Arithmetic shift right ： For signed numbers , Highest complement sign bit .

Logical shift right ： For unsigned numbers , Highest complement 0.

Take an example ：

int a = -1; unsigned int b = -1; printf("%d\n", a >> 1); printf("%u\n", b >> 1)

;

Found after operation , First printed is -1, And then you print 230-1.

Analyze first a>>1, because a Is a signed negative number , So the highest sign bit during filling 1, The last complement value is all 1.

Look again b>>1, because b Is an unsigned number , So the highest position is filled 0, Finally, the first bit out is 0, Others are 1.

So what is the scope of the shift ?

first int Type data only 32 position , So the maximum shift is 31 position , What about the minimum value ? Yes minimum yes **-31 Seats ?** No , Neither shift left nor shift right can shift negative digits .

So the range of the shift is 0~31 position .

Take an example

Compare lower priority issues .

int a = 1; a = a << 2 + 3; printf("%d", a);

first , The result is 32, So if you look at it this way , Yes, first （2+3）, Shift in progress .

So when using the shift character , Questions to consider priority .

<>5. Shift character application

Using the shift character, the bit by bit position can be 0 or 1.

Bit by bit , Set 1.

unsigned int a = 1; int i = 0; for (i = 0; i < 32; i++) { a = a|(a << i); }

printf("%d", a);

Because the last one is signed , So print as -1.

Bit by bit , Set 0

unsigned int a = -1; for (int i = 0; i < 32; i++) { a = a & (a >> i); } printf(

"%d", a);

because a Is an unsigned number , So when filling , repair 0, Perform bitwise or after shifting . Last printed yes 0.

<>6. Some skills

* x&1 == 0 Judge whether the number is even , The last bit of the even number is 0.

* The values of two numbers can be exchanged by XOR .

* x & （x-1） Can make the 1 Become 0.

* For positive numbers ,x&（x-1）== 0 Is to judge 2 Power of .

* Two identical numbers exclusive or , The result is 0, A sum of numbers 0 XOR , The result is himself . Can be used to find numbers .

<>7. Forecast for next period

I still haven't ++ I've finished writing my stuff . In the next issue ++ and – Relevant knowledge .

The next issue is more exciting ~~~

Technology

- Java296 blogs
- Python265 blogs
- Vue125 blogs
- C Language122 blogs
- Algorithm108 blogs
- MySQL96 blogs
- Flow Chart83 blogs
- JavaScript79 blogs
- More...

©2020-2022 ioDraw All rights reserved