C语言:位运算符—-与(&),或(|),非(~),异或(^),左移(<<)和右移(>>)

C语言:位运算符—-与(&),或(|),非(~),异或(^),左移(<<)和右移(>>)本文介绍了 C 语言中的位运算符 包括按位与 amp 按位或 位取反 位异或 左移 lt lt 和右移 gt gt

大家好,欢迎来到IT知识分享网。

C语言 基础开发—-目录


一、位运算符—-简介

位运算符 就是按二进制位进行运算。

位运算符 含义 说明
& 按位 有0为0,双1为1: 1&1=1,1&0=0,0&1=0,0&0=0
只有两者对应位都为1,结果对应位才为 1,否则为 0
I 按位 有1为1,双0为0: 1I1=1,1I0=1,0I1=1,0I0=0
只要两者对应位有一个为1,则结果对应位就为 1,否则为 0
~ 按位取反 1变0,0变1: ~1=0, ~0=1
如果该位为 1,则结果对应位为 0
如果该位为 0, 则结果对应位为 1

^ 按位异或 不同为1,相同为0: 1^1=0, 1^0=1, 0^1=1, 0^0=0
只有两者对应位不一样,则结果对应位才为 1, 否则为 0
<< 左移 左移n位就是乘以2的n次方
所有位依次向左移动,高位丢弃,低位补0
>> 右移 右移n位就是除以2的n次方
无符号数据:所有位依次向右移动,高位补0,低位丢弃
有符号数据:所有位依次向右移动,符号位不变,低位丢弃

二、位运算符—-详细说明

1. 位与运算(&):有0为0,双1为1

只有两者对应位都为1,结果对应位才为 1,否则为 0

变量 十六进制数值 二进制数
a 0x03 0000 0011
b 0x0A 0000 1010
a&b 0x02 0000 0010

举例说明:

#include <stdio.h> int main(int argc, char *argv[]) { 
     unsigned char a=0x03,b=0x0A; printf("a=0x%X\n",a); printf("b=0x%X\n",b); printf("a&b=0x%X\n",a&b); return 0; } 

运行结果如下:

在这里插入图片描述

2. 位或运算(|):有1为1,双0为0

只要两者对应位有一个为1,则结果对应位就为 1,否则为 0

变量 十六进制数值 二进制数
a 0x03 0000 0011
b 0x0A 0000 1010
aIb 0x0B 0000 1011

举例说明:

#include <stdio.h> int main(int argc, char *argv[]) { 
     unsigned char a=0x03,b=0x0A; printf("a=0x%X\n",a); printf("b=0x%X\n",b); printf("a|b=0x%X\n",a|b); return 0; } 

运行结果如下:

在这里插入图片描述

3. 位取反运算(~):1变0,0变1

变量 十六进制数值 二进制数
a 0x03 0000 0011
~a 0xFC 1111 1100

举例说明:

#include <stdio.h> int main(int argc, char *argv[]) { 
     unsigned char a=0x03,b=~a; printf("a=0x%X\n",a); printf("b=0x%X\n",b); return 0; } 

运行结果如下:

在这里插入图片描述

4. 位异或运算(^):不同为1,相同为0

只有两者对应位不一样,则结果对应位才为 1, 否则为 0

变量 十六进制数值 二进制数
a 0x03 0000 0011
b 0x0A 0000 1010
a^b 0x09 0000 1001

举例说明:

#include <stdio.h> int main(int argc, char *argv[]) { 
     unsigned char a=0x03,b=0x0A; printf("a=0x%X\n",a); printf("b=0x%X\n",b); printf("a^b=0x%X\n",a^b); return 0; } 

运行结果如下:

在这里插入图片描述

5. 左移运算(<<)

所有位依次向左移动,高位丢弃,低位补0。

变量 十六进制数值 二进制数
a 0x03 0000 0011
a<<2 0x0C 0000 1100

举例说明:

#include <stdio.h> int main(int argc, char *argv[]) { 
     unsigned char a=0x03; printf("a=0x%X\n",a); printf("a<<2=0x%X\n",a<<2); return 0; } 

运行结果如下:

在这里插入图片描述

6. 右移运算(>>)

无符号数据:所有位依次向右移动,高位补0,低位丢弃。

变量 十六进制数值 二进制数
a 0x083 1000 0011
a>>1 0x41 0100 0001

举例说明:

#include <stdio.h> int main(int argc, char *argv[]) { 
     unsigned char a=0x83; printf("a=0x%X\n",a); printf("a>>1=0x%X\n",a>>1); return 0; } 

运行结果如下:

在这里插入图片描述

有符号数据:所有位依次向右移动,符号位不变,低位丢弃。

变量 十六进制数值 二进制数
a 0x083 1000 0011
a>>1 0xC1 1100 0001

举例说明:

#include <stdio.h> int main(int argc, char *argv[]) { 
     char a=0x83; printf("a=0x%X\n",(unsigned char)a); printf("a>>1=0x%X\n",(unsigned char)(a>>1)); return 0; } 

运行结果如下:

在这里插入图片描述


免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120085.html

(0)
上一篇 2025-10-31 22:33
下一篇 2025-10-31 22:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信