
第13章位运算 位运算功能是C语言的一大特色功能。 所谓位运算是指针对数据中的二进制位进 行的运算。 只能对整型、字符型数据进行位运算。 C语言中有6种基本位运算符
第13章 位运算 位运算功能是C语言的一大特色功能。 所谓位运算是指针对数据中的二进制位进 行的运算。 只能对整型、字符型数据进行位运算。 C语言中有6种基本位运算符

按位取反运算符 进行按位取反运算时,若运算位为0,则结果位 为1;若运算位为1时,则结果位为0。 例如: short int a=15,b=~a; b的结果为65520 因为~0000000000001111B =1111111111110000B
按位取反运算符 进行按位取反运算时,若运算位为0,则结果位 为1;若运算位为1时,则结果位为0。 例如: short int a=15,b=~a; b的结果为65520 因为~00000000 00001111B =11111111 11110000B

按位与运算符 进行按位与运算时,只有相运算的两位均为1时, 结果位才为1。 例如: short int a=3,b-5,c=a&b; c的结果为1 因为0000000000000011B &0000000000000101B 0000000000000001B
按位与运算符 进行按位与运算时,只有相运算的两位均为1时, 结果位才为1。 例如: short int a=3,b=5,c=a&b; c的结果为1 因为 00000000 00000011B & 00000000 00000101B - = 00000000 00000001B

按位或运算符 进行按位或运算时,只有相运算的两位均为0时, 结果位才为0。 例如: short int a=3,b=5,c=ab; c的结果为7 因为0000000000000011B L0000000000000101B 0000000000000111B
按位或运算符 进行按位或运算时,只有相运算的两位均为0时, 结果位才为0。 例如: short int a=3,b=5,c=a|b; c的结果为7 因为 00000000 00000011B | 00000000 00000101B - = 00000000 00000111B

按位异或运算符 进行按位异或运算时,若相运算的两位相异,则 结果位为1;若相运算的两位相同,则结果位 为0。 例如: short int a=15,b=10,c=ab; c的结果为5。 因为0000000000001111B ^0000000000001010B =0000000000000101B
按位异或运算符 进行按位异或运算时,若相运算的两位相异,则 结果位为1;若相运算的两位相同,则结果位 为0。 例如: short int a=15,b=10,c=a^b; c的结果为5。 因为00000000 00001111B ^00000000 00001010B =00000000 00000101B

按位左移运算符 格式:变量<n 其中n是左移的位数 功能:用于将变量的内容左移n个二进制位。即 从左边去掉n位,从右边补上n个0。 例如: short int a=15,b=a<<2; b的结果为60。 因为0000000000001111B<<2 =0000000000111100B 可见,左移一位相当于乘以2
按位左移运算符 格式:变量<<n 其中n是左移的位数 功能:用于将变量的内容左移n个二进制位。即 从左边去掉n位,从右边补上n个0。 例如: short int a=15,b=a<<2; b的结果为60。 因为00000000 00001111B<<2 =00000000 00111100B 可见,左移一位相当于乘以2

按位右移运算符 格式:变量>>n 其中n是右移的位数 功能:用于将变量的内容右移个二进制位。即 从右边去掉n个二进制位,从左边补上n个二进 制位。 对于无符号整数,左边补0;对于有符号整数, 左边补符号位
按位右移运算符 格式:变量>>n 其中n是右移的位数 功能:用于将变量的内容右移n个二进制位。即 从右边去掉n个二进制位,从左边补上n个二进 制位。 对于无符号整数,左边补0;对于有符号整数, 左边补符号位

例如: short int a=16,b=a>>2; b的结果为4。 因为0000000000010000B>>2 =0000000000000100B
例如: short int a=16,b=a>>2; b的结果为4。 因为00000000 00010000B>>2 =00000000 00000100B

例如: short int a=-16,b=a>>2; b的结果为-4。 因为1111111111110000B>>2 =1111111111111100B 可见,右移一位相当于除以2
例如: short int a=-16,b=a>>2; b的结果为-4。 因为11111111 11110000B>>2 =11111111 11111100B 可见,右移一位相当于除以2

若两个运算对象的位数不同,则将较短者 补齐。 对于无符号整数,左边补0;对于有符号整 数,左边补符号位
若两个运算对象的位数不同,则将较短者 补齐。 对于无符号整数,左边补0;对于有符号整 数,左边补符号位