C语言之位运算符_c语言按位取反运算符怎么用

C语言之位运算符_c语言按位取反运算符怎么用1、在C语言中,位运算符能够针对整数和字符数据的位(bit)进行逻辑与位移的运算,通常区分为“位逻辑运算符”与“位位移运算符”两种。2、位逻辑运算符如下表:运算符 功能 运算过程 & AND(与) 逐位与 | OR(或) 逐位或 ^ XOR(异或) 逐位异或 ~ NOR(非) 逐位非 案例程序如下:#include<stdio.h>#include<stdlib.h&gt…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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;
}

运行结果如下:

C语言之位运算符_c语言按位取反运算符怎么用

 特别注意:~(NOT,非运算)

NOT的作用是取1的补码(complement),在二进制中也就是0与1互换。例如a=12的二进制表示法为1100,取1的补码后,由于所有位都会进行0与1的互换,因此运算后的结果为-13,运算过程如下:

NOT(~)

C语言之位运算符_c语言按位取反运算符怎么用

 

3、位位移运算符

位位移运算符会将整数数值的各个位向左或向右移动指定的位数,C语言提供两种位位移运算符,分别是左移运算符(<<)与右移运算符(>>)。

左移运算符(<<):左移运算符可将操作数的各个位向左移动n位,左移后超出存储范围的就舍去,右边空出来的位补0。语法格式如下:

a<<n

 举例:表达式“12<<2”,数值12的二进制值为1100,向左移动两位后成为110000(十进制为48)。运算过程如下:

C语言之位运算符_c语言按位取反运算符怎么用

 右移运算符(>>):右移运算符(>>)与左移相反,可将操作数的各个位向右移动n位,右移后超出存储范围的就舍去。注意右边空出的位,如果数值是正数就补0,是负数则补1.语法格式如下:

a>>n

例如:表达式 “12<<2”,数值12的二进制值为1100,向右移动两位后成为0011(十进制为3)。运算过程如下:

C语言之位运算符_c语言按位取反运算符怎么用

思考一个问题:负数与左移运算符(<<)及右移运算符(>>)的关系。

我们声明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;
}

 运行结果如下:

C语言之位运算符_c语言按位取反运算符怎么用

 本专栏还有运算符的相关总结分享,持续更新中,未完待续……

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185974.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LeetCode–046–全排列(java)

    LeetCode–046–全排列(java)给定一个没有重复数字的序列,返回其所有可能的全排列。示例:无奈,用swap的方法从左向右滑动,直到最后结果和最初的一致停止,只适用于三位数。。。。(改进一下让每个数字作为第一位后面的进行滑动,应该

    2022年7月3日
    22
  • Quartz任务中调用Spring容器中bean及动态调度任务-SchedulerFactoryBean「建议收藏」

    Quartz任务中调用Spring容器中bean及动态调度任务-SchedulerFactoryBean「建议收藏」Quartz是开源任务调度框架中的翘首,它提供了强大任务调度机制,同时保持了使用的简单性。Quartz允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行关联映射。此外,Quartz提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统因故障关闭,任务调度现场数据并不会丢失。此外,Quartz还提供了组件式的侦听器、各种插件、线程池等功能。Spring为…

    2022年5月23日
    98
  • unit 5 Communicating with other users

    unit 5 Communicating with other users
    unit5Communicatingwithotherusers
     
    在命令下还有一些关于通讯的命令。有些还允许实时的通信,提供功能性的chat,当其他人允许你给他发送邮件。

    Real-TimeCommunica

    2022年4月30日
    38
  • java测试面试问题_struts2面试题

    java测试面试问题_struts2面试题Javashiro面试题1、简单介绍一下Shiro框架?ApacheShiro是Java的一个安全框架。使用Shiro可以非常容易的开发出足够好的应用。其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以帮助我们完成功能:认证、授权、加密、会话管理、与Web集成、缓存等。三个核心组件:Subject,SecurityManager和Realms。●Subject:即“当…

    2022年10月14日
    3
  • myeclipse-10.7-offline-installer-windows安装图解及注意事项

    myeclipse-10.7-offline-installer-windows安装图解及注意事项

    2021年11月16日
    44
  • 数据挖掘/机器学习/算法岗2017校招面试总结「建议收藏」

    数据挖掘/机器学习/算法岗2017校招面试总结「建议收藏」目前就职于腾讯,想内推朋友可以发我简历(校招/社招都要),邮箱384375530@qq.com,注明岗位和工作城市。这个岗位叫法很多,算法岗,数据挖掘岗,机器学习岗,基础研究等等,总结一下从16年9月校招的面试情况。百度:师姐给我内推的,一面聊了2个半小时,基本在写代码。用MapReduce写好友推荐,在一堆单词里面找出现次数最多的k个;设计一个栈,O(1)时间返回最值;求多叉树深…

    2022年6月12日
    34

发表回复

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

关注全栈程序员社区公众号