您现在的位置是:主页 > news > 大庆城市建设投资网站/百度推广哪家做的最好

大庆城市建设投资网站/百度推广哪家做的最好

admin2025/5/3 4:02:37news

简介大庆城市建设投资网站,百度推广哪家做的最好,asp.net mvc 5网站开发之美,松江做移动网站一、基本知识(一)位bit运算符位与&运算符特点位或|运算符特点(二)移位运算符(三)位运算符和移位运算符结合(bit位清0与置1公式)二、例程(一)清0与置1推导步骤(二)借助数组将某一位清0和置1(三)使用指针清0和 置1一、基本知识(一)位(bit)运算符1、功能:这些运算符…

大庆城市建设投资网站,百度推广哪家做的最好,asp.net mvc 5网站开发之美,松江做移动网站一、基本知识(一)位bit运算符位与&运算符特点位或|运算符特点(二)移位运算符(三)位运算符和移位运算符结合(bit位清0与置1公式)二、例程(一)清0与置1推导步骤(二)借助数组将某一位清0和置1(三)使用指针清0和 置1一、基本知识(一)位(bit)运算符1、功能:这些运算符…

一、基本知识

(一)位bit运算符

位与&运算符特点

位或|运算符特点

(二)移位运算符

(三)位运算符和移位运算符结合(bit位清0与置1公式)

二、例程

(一)清0与置1推导步骤

(二)借助数组将某一位清0和置1

(三)使用指针清0和 置1

一、基本知识

(一)位(bit)运算符

1、功能:这些运算符就是专门操作内存中的二进制数

位与:&(目的:将二进制数的bit清0)

位或:|(目的:将二进制数的bit置1)

2、位与(&)运算符与 位或(|)运算符

(1)位与&运算符特点

语法:C = A & B

规律:任何数跟0做位与,结果为0,任何数跟1做位与,保持原值

例如:

数字 2进制 16进制

A 01011010 0x5A

B 11100111 0xE7

&--------------------

C 01000010 0x42

(2)位或|运算符特点:

语法:C = A | B

规律:任何数跟1做位或,结果为1,任何数跟0做位或,保持原值

例如:

数字 2进制 16进制

A 01011010 0x5A

B 11100111 0xE7

|--------------------

C 11111111 0xFF

(二 )移位运算符

1、功能:将二进制数整体向左边或者向右边移动N个位置

分两种:

左移:A<>B

语义:将A右移B个位置

例如:

char a = 0x5a; //a=0x5a=01011010

char b = a << 2; //b=a<<2=0x5a<<2=01011010<<2 = 01101000 = 0x68

printf("a = %#x b = %#x\n", a, b); //a = 0x5a, b = 0x68

b = a >> 2; //b = a >> 2 = 0x5a >> 2 = 01011010>>2=00010110 = 0x16

printf("a = %#x b = %#x\n", a, b); //a = 0x5a b = 0x16

a = 0xa5; //a = 0xa5 = 10100101

b = a >> 2; //b = a >> 2 = 0xa5 >> 2 = 10100101>>2=11101001=0xE9

printf("a = %#x b = %#x\n", a, b); //a = 0xa5 b = 0xe9

2、移位运算符特点

1.向左移动后右边空出来的数据用0来填充

0x5a << 2 = 01011010 << 2 = 01101000

2.无符号类型数字右移时左边空出来的数据用0来填充

unsigned char a = 0xa5; a >> 2 = 10100101 >> 2 = 00101001

3.有符号类型数字右移时左边空出来的数据用符号位来填充

char a = 0xa5; a >> 2 = 10100101 >> 2 = 11101001

4.移位运算符不会修改变量本身的值

5.只要将来有2的多少次方处理的代码,建议用移位操作

例如:

3*4; //垃圾代码,CPU运行*,/的效率极低

3<<2; //高薪代码,CPU运行移位操作效率极高

12/4; //不推荐

12>>2; //推荐

(三)位运算符和移位运算符结合

1、实际开发常见的场景:位清0和位置1

2、给出以下位操作公式:

(1)清0公式:

1.将某个数据A的第n位清0,其它位保持不变:

A &= ~(0x1 << n); //等价于:A = A & ~(1 << n);

2.将某个数据A从第n位开始,连续两个bit位清0,其它位保持不变:

A &= ~(0x3 << n);

3.将某个数据A从第n位开始,连续三个bit位清0,其它位保持不变:

A &= ~(0x7 << n);

4.将某个数据A从第n位开始,连续四个bit位清0,其它位保持不变:

A &= ~(0xF << n);

5.将某个数据A从第n位开始,连续五个bit位清0,其它位保持不变:

A &= ~(0x1F << n);

6.将某个数据A从第n位开始,连续六个bit位清0,其它位保持不变:

A &= ~(0x3F << n);

7.将某个数据A从第n位开始,连续七个bit位清0,其它位保持不变:

A &= ~(0x7F << n);

8.将某个数据A从第n位开始,连续八个bit位清0,其它位保持不变:

A &= ~(0xFF << n);

(2)置1公式:

1.将某个数据A的第n位置1,其它位保持不变:

A |= (0x1 << n); //等价于:A = A & ~(1 << n);

2.将某个数据A从第n位开始,连续两个bit位置1,其它位保持不变:

A |= (0x3 << n);

3.将某个数据A从第n位开始,连续三个bit位置1,其它位保持不变:

A |= (0x7 << n);

4.将某个数据A从第n位开始,连续四个bit位置1,其它位保持不变:

A |= (0xF << n);

5.将某个数据A从第n位开始,连续五个bit位置1,其它位保持不变:

A |= (0x1F << n);

6.将某个数据A从第n位开始,连续六个bit位置1,其它位保持不变:

A |= (0x3F << n);

7.将某个数据A从第n位开始,连续七个bit位置1,其它位保持不变:

A |= (0x7F << n);

8.将某个数据A从第n位开始,连续八个bit位置1,其它位保持不变:

A |= (0xFF << n);

二、例程

(一)清0与置1推导步骤

1-1、清零

965e27b8102240acac108205070865a2.png

代码截图如下:

8e45db2d71f51a21c1b3b623106c46a3.png

1-2、清零

9361d416eacf445635180233e815e41b.png

代码截图如下

6f5d597989ca45fbec4323865193ed8d.png

ffb9d30956f8746a611c92e7c7b4fa1d.png

2-1、置1

3b7113891e5df4d0c180f0a4d7faacb9.png

(二)、借助 数组将某一位清零和置一

1092c529d376a919976d038b002c556f.png

7c73c0ba12abd881ea8a45acfb9e300d.png

(三)、使用指针清零和 置1

f5f522a8d37f6c987c6242a173990987.png

e69b6937194f307c6f794f56bb791d20.png