C语言位运算符在程序中的作用

来源:本站
导读:目前正在解读《C语言位运算符在程序中的作用》的相关信息,《C语言位运算符在程序中的作用》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言位运算符在程序中的作用》的详细说明。
简介:C语言运算符主要包括:与、或、异或、取反、左移和右移。

C语言运算符主要包括:与、或、异或、取反、左移和右移。

一、按位与(&)

如果两个相应的二进制位都为1,则该位的结果值为1,否则为0

应用:

1.清零

若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:

原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。

a 00101011

b 10010100

c 00000000 //c = a & b

2.取一个书中某些指定位

若有一个整数a(2byte),想要取其中的低字节,只需要将a与8个1按位与即可。

a 00101100 10101100

b 00000000 11111111

c 00000000 10101100 //c = a & b

3.保留指定位

a 01010100

b 00111011

c 00010000 //c = a & b

二、按位或(|)

两个相应的二进制位中只要有一个为1,该位的结果值为1。借用逻辑学中或运算的话来说就是,一真为真

应用:将一个数据的某些位定值为1

a 00110000

b 00001111

c 00111111 //c = a | b

三、按位异或(^)

若参加运算的两个二进制位值相同则为0,否则为1

应用:不用临时变量,交换两个值

计算前:

a=3,即011(2);b=4,即100(2)

计算过程:

a=a ^ b; //即111 = 011 ^ 100

b=b ^ a; //即011 = 100 ^ 111

a=a ^ b; //即100 = 111 ^ 011

计算后:

a=100(2)即 4 ;b = 011(2)即 3;

四、取反(~)

~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0

五、左移(<<)

用来将一个数的各二进制位全部左移N位,右补0

六、右移(>>)

将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

七、原码,反码,补码的基础概念和计算方法

1.原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值

比如如果是8位二进制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

[1111 1111 , 0111 1111] 即 [-127 , 127]

原码是人脑最容易理解和计算的表示方式。

2.反码

反码的表示方法是:

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

3.补码

补码的表示方法是:

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

补码举例:16位的变量求补码,比如-266的补码求法:((266^0xffff)+1) 结果是0xfef6。

提醒:《C语言位运算符在程序中的作用》最后刷新时间 2024-03-14 00:54:37,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言位运算符在程序中的作用》该内容的真实性请自行鉴别。