复习C语言 位运算

0x01:按位与(&)

作用:

1)清零。如果想让一个单元清零,即使其全部二进制位为0

2)取一个数中某些指定位。即将想要的那些位置1.

例:如有一个整数a(2个字节),想要其中的低字节,只需将a与(377,8进制 == 00000000 11111111)按位与即可。

3)要想将哪一位保留下来,就与一个数&运算,此数在该位取1.

0x02:按位或(|)

作用:

常用来对一个数据的某些位定值1,例:a(16位整数),a|0377,则低8位全置1,高8位保持原样

0x03:异或(^)

作用:

1)使特定位翻转

假设有01111010,想使其低4位翻转,即1变0,0变1,。可以将它与00001111进行^运算。

2)与0相^保留原值

3)交换两个值,不用临时变量

假设a=3,b=4

a=a^b;

b=b^a;

a=a^b;

0x03:取反(~)

作用:

若一个整数,若想使最低一位为0,可以用一致性较好的a=a&~1;(~运算符优先级比算术运算符,关系运算符,逻辑运算符和其他运算符都高)

0x03:左移(<<)

作用:

高位左移后溢出,舍弃.

一般用来取低位

0x04:右移(>>)

作用:

低位右移后被舍弃,对无符号数,高位补0

一般用来取低位

右移一位相当于除以2,右移n位相当于除以2的n次方

注意:在右移时,需要注意符号位的问题。对无符号数,右移时左边高位移入0,对于有符号数,如果原来符号位为0(该数为正),则左边也是移入0,如果符号位原来为1(即负数),则左边移入0还是1,取决于计算机系统。

时间: 2024-12-21 00:31:11

复习C语言 位运算的相关文章

C语言--位运算

C语言--位运算 所谓位运算,就是对一个比特(Bit)位进行操作.在<二进制思想以及数据的存储>一节中讲到,比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了. C语言提供了六种位运算符: 运算符 & | ^ ~ << >> 说明 按位与 按位或 按位异或 取反 左移 右移 按位与运算 一个比特(Bit)位只有0和1两个取值,只有参与&运算的两个位都为1时,结果才为1,否则为0.例如1&1为1,0&a

c语言位运算详解

位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. C语言提供的位运算符列表: 运算符含义描述 & 按位与      如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 | 按位或      两个相应的二进制位中只要有一个为1,该位的结果值为1 ^ 按位异或    若参加运算的两个二进制位值相同则为0,否则为1 ~ 取反        ~

C语言位运算

在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作.一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率.C语言提供了位运算的功能, 这使得C语言也能像汇编语言一样用来编写系统程序. 位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 位运算 1.位与&

10、C语言——位运算与文件

位运算与文件 一.位运算 位运算的操作对象只能是整型或字符型数据 c语言提供6种位运算符: & | ^ ~ << >> 复合赋值运算符: &= |= ^= <<= >>= 1.按位与运算(&) 两个相应的二进制都是1时,它们按位运算后的结果才为1,否则为0 作用:清零 2.按位或运算(|) 两个相应的二进制中只要有一个为1时,则它们按位或运算后的结果为1 作用:将特定位置1 3.按位异或运算(^) 当两个相应位同为1或同为0时,按位异

C语言位运算详解(转载)

转载自:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作 运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型.C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结

【C语言位运算的应用】如何按bit位翻转一个无符号整型

其实现思路如下: 将目标数值进行末尾比特位摘取,将所摘取的bit位放到一个相同类型的末尾,目标数值bit位右移,相同类型bit位左移. C语言的位运算符:     实现代码如下: #include <stdio.h>//按位翻转一个无符号整形 unsigned int reverse_bit(unsigned int value) { unsigned int num = 0; int i = 0; for (i = 1; i < 32; i++) { num += value &

C语言位运算遇到的坑

在Data Lab中有一个logicalShift函数给定一个值x和需要移动的位数n,要求只是用运算符:~ & ^ | + << >>,实现逻辑右移运算.思考了很久,然后我写出了如下的代码: /* * logicalShift - shift x to the right by n, using a logical shift * Can assume that 0 <= n <= 31 * Examples: logicalShift(0x87654321,4

C语言位运算实现函数体

/*1.用位操作实现无符号整数的乘法运算,函数原型是unsigned int multiply(unsigned int x, unsigned int y);.例如:(11011)2×(10010)2=((11011)2 unsigned int multiply(unsigned int a,unsigned int b) { int c =0,i = 0; for (;i >=1;//b右移1位 } else { b>>=1; } } return c ; } int main (

结构体、共用体和位运算

1.C语言结构体的定义和使用 在实际问题中,一组数据往往具有不同的数据类型:例如在学生信息登记表中,姓名为字符型,学号为整型或字符型,年龄为整型,性别为字符型,成绩为整型或实型.因为数据类型不同,显然不能用一个数组来存放. 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.定义结构体的一般形式为: struct 结构体名{ 成员列表 }; 每个成员都是结构体的组成部分,有名字,也有数据类型,形式为: 类型说明符 成员名; 例如用结构体来表示学生信息: struct stu{ c