【C】位移操作符

深入理解位移运算:左移与右移在整数处理中的技巧
本文详细解析了左移操作符(<<)的二进制原理,指出其相当于乘以2的效果,并区分了右移操作符(>>)的算术和逻辑移位在正负数上的不同行为。对于负数,特别强调了算术右移的规则。关键词:位移运算,整数,左移,右移,算术移位,逻辑移位,负数处理。

目录

左移操作符<<

右移操作符>>


位移操作符只能对整数进行操作

左移操作符<<

将整数在内存中的二进制补码整体向左移动一位,左边丢弃,右边补0

 左移有*2的效果

右移操作符>>

右移操作符分为算术移位逻辑移位它对正数和负数的作用是有区别的。

算术移位:右边丢弃,左边补原符号位

逻辑移位:右边丢弃,左边补0

正数

在对正数进行右移的时候,无论是算术移位还是逻辑移位都一样。

负数

当对一个负数进行右移时,采用的是算术移位。

C语言操作符有以下几大类:算术操作符位移操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构成员等 [^1][^3]。 ### 算术操作符 算术操作符包括 `+`、`-`、`*`、`/`、`%`。除了 `%` 操作符之外,其他操作符可以作用于整数和浮点数。`/` 操作符是取商,`%` 操作符是取余。对于 `/` 操作符,如果两个操作数都为整数,执行整数除法;只要有浮点数,执行的就是浮点数除法。`%` 操作符的两个操作数必须为整数,返回的是整除之后的余数 [^1][^5]。 ```c #include <stdio.h> int main() { int a = 3 / 5; // a结果为0 double b = 5.0 / 3; // b结果为1.666... int c = 7 % 3; // c结果为1 // int d = 7 % 3.0; // 编译器报错,%操作符的操作数必须为整数 printf("a = %d\n", a); printf("b = %lf\n", b); printf("c = %d\n", c); return 0; } ``` ### 位移操作符 位移操作符包括左移操作符 `<<` 和右移操作符 `>>` [^3]。 ### 位操作符操作符包括按位与操作符 `&`、按位或操作符 `|`、按位异或操作符 `^` [^3]。 ### 赋值操作符 赋值操作符用于给变量赋值,如 `=`、`+=`、`-=`、`*=`、`/=`、`%=` 等。 ```c #include <stdio.h> int main() { int a = 5; a += 3; // 相当于 a = a + 3; printf("a = %d\n", a); return 0; } ``` ### 单目操作符 单目操作符只需要一个操作数,如 `!`(逻辑反操作)、`-`(负值)、`+`(正值)、`&`(取地址)、`*`(间接访问操作符,解引用操作符)、`sizeof`(求操作数的类型长度)等 [^3]。 ### 关系操作符 关系操作符用于比较两个值的大小关系,如 `>`、`<`、`>=`、`<=`、`==`(相等)、`!=`(不相等) [^3]。 ### 逻辑操作符 逻辑操作符包括逻辑与 `&&` 和逻辑或 `||` [^3]。 ### 条件操作符 条件操作符又被称为三目操作符,是唯一一种可以操作三个数字的操作符。其形式为 `exp1 ? exp2 : exp3`,意思是如果 `exp1` 成立(`true`),则结果为 `exp2`;如果不成立(`false`),则结果为 `exp3` [^2][^4]。 ```c #include <stdio.h> int main() { int a = 3; int b = 5; int max = (a > b ? a : b); // 用来找到两数的较大值 printf("max = %d\n", max); return 0; } ``` ### 逗号表达式 逗号表达式是用逗号分隔的多个表达式,从左到右依次计算,整个逗号表达式的值是最后一个表达式的值 [^2][^3][^4]。 ### 下标引用、函数调用和结构成员 下标引用操作符 `[]` 用于访问数组元素;函数调用操作符 `()` 用于调用函数;结构成员操作符 `.` 和 `->` 用于访问结构体的成员 [^3]。 ### 表达式求值 表达式求值过程中可能涉及隐式类型转换、算术转换和操作符的属性等问题 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值