【C语言】位操作符详解

简介: 【C语言】位操作符详解



C语言中的位操作符有以下:

&
|
^
//按位与
//按位或
//按位异或

位运算符是计算两者之间的补码,然后得到的是计算后补码转化为的原码进行输出表示

注:他们的操作数必须是整数。

1、按位与( & )

以下为简单举例:

#include<stdio.h>
int main()
{
  int a = 3;
  int b = -5;
  
  int c = a | b;
  
  return 0;
}

对于以上代码的运算,在下面进行拆分讲解。分别先列出a和b的原码,然后计算得到补码(原码取反+1)

000000000000000000000011  a原码

000000000000000000000011  a补码(正数的补码是他本身)

100000000000000000000101  b原码

111111111111111111111111010  b反码

111111111111111111111111011  b补码

在得到二者补码后将补码进行按位与运算。即对应位置都为1才为1,有一个是0即为0,具体运算如下:

000000000000000000000011  a补码

111111111111111111111111011  b补码

000000000000000000000011  c补码

在经过从补码变为原码的过程:

111111111111111111111111101  c原码

所以a和b按位与最终得到的c二进制为111111111111111111111111101。

2、按位或( | )

举例:

#include<stdio.h>
int main()
{
  int a = 3;
  int b = -5;
  
  int c = a | b;
  printf("%d\n",c);
  return 0;
}

与按位与一样,按位或同样是先计算出a和b的补码然后将补码进行计算,然后得到的补码再转换为原码才是真正c的值

000000000000000000000011  a原码

000000000000000000000011  a补码(正数的补码是他本身)

100000000000000000000101  b原码

111111111111111111111111010  b反码

111111111111111111111111101  b补码

按位或的计算方法是两个二进制序列对应位置有1则为1,得到补码然后再转化为原码

000000000000000000000011  a补码

111111111111111111111111011  b补码

111111111111111111111111011  c补码

在经过从补码变为原码的过程:(负数取反,符号位不变)

100000000000000000000101  c原码

所以得到的按位或计算得到的值为100000000000000000000101。

运算结果显示:

3.按位异或( ^ )

依旧用实例来进行讲解

#include<stdio.h>
int main()
{
  int a = 3;
  int b = -5;
  
  int c = a ^ b;
  printf("%d\n",c);
  return 0;
}

000000000000000000000011  a原码

000000000000000000000011  a补码(正数的补码是他本身)

100000000000000000000101  b原码

111111111111111111111111010  b反码

111111111111111111111111101  b补码

按位异或运算遵循的原则是,相同位为0,相异位为1,详细运算如下:

000000000000000000000011  a补码

111111111111111111111111011  b补码

111111111111111111111111000  c补码

在经过从补码变为原码的过程:(负数取反,符号位不变)

100000000000000000001000  c原码

所以得到的c的原码为100000000000000000001000。

运算结果为:

4.结语

       如有遗漏或问题请直接指出,感谢阅读。

目录
相关文章
|
5天前
|
C语言
C语言之操作符1
C语言之操作符1
12 0
|
6天前
|
编译器 C语言
操作符详解(C语言基础深入解析)
操作符详解(C语言基础深入解析)
|
20天前
|
存储 编译器 C语言
爱上C语言:操作符详解(下)
爱上C语言:操作符详解(下)
|
2月前
|
算法 测试技术 C语言
【C语言】异或(^)操作符
【C语言】异或(^)操作符
16 0
|
2月前
|
存储 算法 编译器
【c 语言 】移位操作符详解
【c 语言 】移位操作符详解
40 0
|
2月前
|
存储 算法 程序员
【c 语言 】位操作符详解
【c 语言 】位操作符详解
41 0
|
2月前
|
存储 编译器 Linux
操作符详解【c语言】
操作符详解【c语言】
|
2月前
|
存储 C语言
【C语言】位与移位操作符详解
【C语言】位与移位操作符详解
【C语言】位与移位操作符详解
|
2月前
|
存储 编译器 程序员
c语言从入门到实战——操作符详解
C语言操作符指的是程序中用来进行各种计算、逻辑和条件操作的符号或符号组合。 操作符是编程中用于执行特定操作或比较数据的符号。它们根据操作类型分为算术、比较、逻辑和位操作符。算术操作符执行加、减、乘、除等数学运算;比较操作符比较两个值的大小或相等性;逻辑操作符连接多个条件,形成更复杂的逻辑判断;位操作符则直接对整数的二进制位进行操作。了解各种操作符的特性和用法,对于编写高效、准确的代码至关重要。
54 0
|
2月前
|
存储 编译器 程序员
C语言第十六弹---操作符(下)
C语言第十六弹---操作符(下)