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


相关推荐

  • 【Hibernate】uniqueResult方法「建议收藏」

    【Hibernate】uniqueResult方法「建议收藏」数据库中根据你的查询条件只会返回唯一结果,就可以用uniqueResult这个方法!否则就用list();其返回类型为Object uniqueResult()方法通常是在业务方法查询语句中用到的,比如(UsersRoles)getSession().createQuery(“selecturfromUsersRolesurwhereur.role.id=?andur.

    2025年10月22日
    3
  • Ace在线代码编辑器使用「建议收藏」

    Ace在线代码编辑器使用「建议收藏」这边文章https://blog.csdn.net/liuxiao723846/article/details/106732401介绍了Ace的使用,本文围绕Ace的api深入介绍其具体功能。官网api使用文档:https://ace.c9.io/#nav=howto1、基本配置:ace有许多的配置项可供选择,通过这些配置项可以打造自己的个性编辑器你可以通过setTheme来设置主题,需要注意的是主题文件要存在,并且需要与ace.js同级,命名规则为theme-主题名.jsedito.

    2022年8月14日
    55
  • springboot常用注解使用详解

    springboot常用注解使用详解对于 springboot 而言 需要掌握平常使用的注解案例详解如下 Controller 标明这是一个 SpringMVC 的 Controller 控制器 SpringBootAp SpringBoot 项目的核心注解 主要目的是开启自动配置 Configuratio 这是一个配置 Spring 的配置类 publicclassH nbsp nbsp

    2025年9月14日
    2
  • 算法の序列

    算法の序列

    2022年1月4日
    52
  • Linux命令修改文件名和文件夹名

    Linux命令修改文件名和文件夹名Linux 修改文件名语句 mvoldFileNam 示例 我想把 aaa txt 修改为 bbb txt 示例语句 mvaaa txtbbb txt 把当前目录下的 file1 文件名改成 file2 如果该目录下有 file2 则覆盖以前的 file2 文件

    2025年11月27日
    4
  • Android 程序员等级要求

    Android 程序员等级要求很多Android开发者已经度过了初级、中级,如何成为一个Android高手呢?Android123就各个级别的程序员应该掌握哪些内容作为下面分类。  一、初级  1.拥有娴熟的Java基础,理解设计模式,比如OOP语言的工厂模式要懂得。   2.掌握AndroidUI控件、AndroidJava层API相关使用。   迈向中级,最好再次更新下Ja

    2022年6月14日
    40

发表回复

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

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