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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c++ 指针赋值「建议收藏」

    c++ 指针赋值「建议收藏」
    一、一级指针
     
    char*a=”a”;
    char *b=”b”;
     
    a=b;//这个是b把存的内容b给a,此时a的内容是b,所以指针与指针赋值实际也是传值,和普通变量一样。若a的内容变为c,则b的内容还是b
     
    二、二级指针
     
    char**c=&a;
     
    char**d=&b;
     
    c=d;//这样是把b的地址给了c,此时d和c都指向b,若c的内容发生改变

    2022年7月27日
    1
  • 频率之外谁重要?计算机存储系统解析(转载)

    频率之外谁重要?计算机存储系统解析(转载)

    2021年9月2日
    45
  • mongodb存储的数据类型(redis存储数据类型)

    MongoDB数据存储结构1.基本概念在MongoDB中数据存储的基本概念是数据库、集合、文档。文档(document)是MongoDB中数据的基本存储单元,非常类似与关系型数据库管理系统中的行,当更有表现力。集合(collection)可以看作是一个拥有动态模式(dynamicschema)的表。MongoDB的一个实例可以拥有多个相互独立的数据库(database),每一…

    2022年4月13日
    440
  • 史上最牛逼的CDH安装部署来了 亲测有效

    cdh安装部署错误史上最低可以试试

    2022年4月3日
    34
  • 这11款chrome神器,用起来爽到爆

    这11款chrome神器,用起来爽到爆前言对于从事IT行业的我们来说,几乎无时无刻都在用chrome浏览器,因为它给我们的工作和生活带来了极大的便利。今天给大家分享我用过的11款牛逼的chrome插件,你看完前3个可能就会忍不住想点赞了。1.谷歌翻译很多小伙伴,英语不太好,包括我自己,英语刚过四级。从事软件相关工作时,有时有些吃力,因为很多优秀的技术网站、书籍或者文章都是老外写的,如果因为看不懂就放弃阅读,我们将会少了很多学习和进步的机会。今天分享的第一个神器就是:谷歌翻译。在没使用谷歌翻译之前,访问https://doc

    2022年5月6日
    49
  • centos7 command not found_centos7 failed to start LSB

    centos7 command not found_centos7 failed to start LSB在进行CentOS最小化安装后,会发现lspci命令不好使。其实是因为相应的软件包没有安装。在终端中执行下列命令:$yumwhatprovides*/lspci将会得到如下的显示内容pciutils-3.1.4-9.el6.x86_64:PCIbusrelatedutilitiesRepo:baseMatchedfrom:Filename…

    2022年9月10日
    0

发表回复

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

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