大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
1、在C语言中,位运算符能够针对整数和字符数据的位(bit)进行逻辑与位移的运算,通常区分为“位逻辑运算符”与“位位移运算符”两种。
2、位逻辑运算符如下表:
运算符 | 功能 | 运算过程 |
& | AND(与) | 逐位与 |
| | OR(或) | 逐位或 |
^ | XOR(异或) | 逐位异或 |
~ | NOR(非) | 逐位非 |
案例程序如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a=12,b=38;
printf("%d&%d=%d\n",a,b,a&b);/* AND运算 */
printf("%d|%d=%d\n",a,b,a|b);/* OR运算 */
printf("%d^%d=%d\n",a,b,a^b);/* XOR运算 */
printf("~%d=%d\n",a,~a);/* NOT运算 */
system("pause");
return 0;
}
运行结果如下:
特别注意:~(NOT,非运算)
NOT的作用是取1的补码(complement),在二进制中也就是0与1互换。例如a=12的二进制表示法为1100,取1的补码后,由于所有位都会进行0与1的互换,因此运算后的结果为-13,运算过程如下:
NOT(~)
3、位位移运算符
位位移运算符会将整数数值的各个位向左或向右移动指定的位数,C语言提供两种位位移运算符,分别是左移运算符(<<)与右移运算符(>>)。
左移运算符(<<):左移运算符可将操作数的各个位向左移动n位,左移后超出存储范围的就舍去,右边空出来的位补0。语法格式如下:
a<<n
举例:表达式“12<<2”,数值12的二进制值为1100,向左移动两位后成为110000(十进制为48)。运算过程如下:
右移运算符(>>):右移运算符(>>)与左移相反,可将操作数的各个位向右移动n位,右移后超出存储范围的就舍去。注意右边空出的位,如果数值是正数就补0,是负数则补1.语法格式如下:
a>>n
例如:表达式 “12<<2”,数值12的二进制值为1100,向右移动两位后成为0011(十进制为3)。运算过程如下:
思考一个问题:负数与左移运算符(<<)及右移运算符(>>)的关系。
我们声明a=12,分别计算12<<2与12>>2的值,接着重新设置a=-12,求-12<<2与-12>>2的值。
程序如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a=12; /* a的二进制数为00001100 */
printf("%d<<%d=%d\n",a,2,a<<2);/* 左移2位运算 */
printf("%d>>%d=%d\n",a,2,a>>2);/* 右移2位运算 */
a=-12;/* a的二进制数为11110100 */
printf("%d<<%d=%d\n",a,2,a<<2);/* 左移2位运算 */
printf("%d>>%d=%d\n",a,2,a>>2);/* 右移2位运算 */
system("pause");
return 0;
}
运行结果如下:
本专栏还有运算符的相关总结分享,持续更新中,未完待续……
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185974.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...