C语言位运算详解(移位操作符、位操作符) 您所在的位置:网站首页 移位是指在什么作用 C语言位运算详解(移位操作符、位操作符)

C语言位运算详解(移位操作符、位操作符)

2024-07-15 22:32| 来源: 网络整理| 查看: 265

目录

一、整数在内存中的存储方式

二、移位操作符

1、左移操作符

2、右移操作符

a.逻辑右移

b.算数右移

ps、移位操作符使用警告

三、位操作符

用例代码:

a.按位与(&)

b.按位或(|)

c.按位异或(^)

四、例题感受位操作符的魅力

第一题:不创建临时变量,交换两个整形变量的值

第二题:编写代码实现:求⼀个整数存储在内存中的⼆进制中1的个数。

方法一(常规):

方法二( 1 11111111111111111111111111111011 //取反+1 10000000000000000000000000000101 printf("n= %d\n", n);//-5 printf("num= %d\n", num); return 0; } ps、移位操作符使用警告

警告⚠:对于移位运算符,不要移动负数位,这个是标准未定义的。

三、位操作符

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

用例代码: #include int main() { int num1 = -3; int num2 = 5; printf("%d\n", num1 & num2); printf("%d\n", num1 | num2); printf("%d\n", num1 ^ num2); printf("%d\n", ~0); return 0; } a.按位与(&)

        注意,这个不是取地址操作符,虽然长得一模一样,但是其意义是不同的。

        按位与操作是一种二元操作符,用于对两个整数进行按位与运算。按位与操作对两个整数的每个对应位执行逻辑and操作。具体来说,对于两个二进制数的对应位,如果两个位都是1,则结果位为1,否则结果位为0。按位与操作可以用符号"&"表示。

b.按位或(|)

        按位或是一种位运算操作符,表示两个数的每一位进行或运算。在二进制中,对应位都为0时,结果为0;对应位有一个为1时,结果为1。语法上,按位或操作符用符号“|”表示。

c.按位异或(^)

        按位异或是一种位运算,表示两个相应位的值不同则结果为1,否则为0。在计算机中,按位异或运算可以用来对数据进行加密、数据交换、校验等操作。按位异或运算通常使用符号“^”表示。按位异或运算是一种常见的位运算操作,可以用来实现一些特定的功能和算法。

d.按位取反(~)

        按位取反与其他几个兄弟位操作符不同,它仅有一个操作数。按位取反是指将一个数的二进制表示中的每一位取反,即0变为1,1变为0。在计算机中,按位取反通常使用位运算符“~”来实现。

四、例题感受位操作符的魅力 第一题:不创建临时变量,交换两个整形变量的值

这就是我们平常交换两整形变量值的办法(创建临时变量)

int main() { int a = 10; int b = 20; int c = a; a = b; b = c; return 0; }

学习了位操作符后我们可以这样写:

#include int main() { int a = 10; int b = 20; a = a ^ b; b = a ^ b; a = a ^ b; printf("a = %d b = %d\n", a, b); return 0; }

原理:

位操作符支持交换律

第二题:编写代码实现:求⼀个整数存储在内存中的⼆进制中1的个数。 方法一(常规):

原理:十进制转二进制的方法:十进制转二进制_百度百科 (baidu.com)

//⽅法1 #include int main() { int num = 10; int count = 0;//计数 while (num) { if (num % 2 == 1) count++; num = num / 2; } printf("⼆进制中1的个数 = %d\n", count); return 0; }

但是这样的方法是不足以计算负数的二进制位的,我们还需要进一步改进。

方法二(


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有