位运算符 含义
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移

位运算符中除了~,其他均为二元运算符,需要两个操作数;

操作数可以是整型和字符型,单数不能为浮点型;

按位与:
有假即假
0&0=0 0&1=0
1&0=0 1&1=1

按位或
有真即真
0|0=0 0|1=1
1|0=1 1|1=1

按位异或:(xor)
同假异真
0^0=1 1^1=1
1^0=0 0^1=0

异或运算符的作用:
1、使特定位翻转:使高四位不变,低四位取反;如下图,使01110110,
使用00001111与其异或就能达到目的;与0异或不变,与1异或取反;

交换两个数的值,不用临时变量:

a=6;b=7;
要交换这两个数的值可以不适用临时变量,用异或运算就可以完成;
a=a^b;
b=b^a;
a=a^b;
就完成了两个数值得交换;

按位取反:
每一位按位取反,即0变为1,1变为0;

左右移运算符:

左移运算符是讲一个数的每一个二进制位向左移;
如:a=15;
a<<2;(表示a左移两位)
a=15的二进制原本为:00001111;
左移两位以后为:00111100;(60)

所以左移一位就等于原来的数乘2,左移两位就乘4;(只适用于左移溢出舍弃的高位中不含1的情况);

左移的时候高位溢出舍去,低位补零;

右移的时候低位溢出舍去,对于无符号整数,高位补零;

右移一位除以2,右移n位,除以2的n次方;

对于有符号整数来说,正数右移,高位依然补0。负数右移,高位保持为1。而对于有符号数来说,进行逻辑右移。z在C语言中,无符号数依然可以为负数;

移入0的称为逻辑右移,即简单右移;移入1的称为算数右移;

下面来讲讲逻辑右移和算数右移:

上面说了,对于无符号数来说,右移高位补0;可能大家都知道无符号数只有正数。但是在c语言中,负数也可以声明为无符号数,此时右移,高位依然补0;

#include<stdio.h>
int main()
{unsigned char a=-2;a=a>>1;printf("%d",a);return 0;
}

-2的二进制表示为11111110,因为声明为无符号数,所以右移一位以后高位补零(逻辑右移)01111111最后结果为127;

如果将其声明为有符号数,那么根据规则,-2的最高位为符号位1,按位右移的话进行算数右移

#include<stdio.h>
int main()
{char a=-2;a=a>>1;printf("%d",a);return 0;
}

-2的二进制为11111110,进行算数右移以后为11111111(-1);

对于有符号数中的正数来说依然进行逻辑右移;

最后总结一下,负数进行算数右移,正数进行逻辑位移。但是负数被声明为无符号类型时,进行逻辑右移;也就是负数既可以进行逻辑右移,也可以进行算数右移,但是正数只能进行逻辑右移。

c语言 位运算和位运算符相关推荐

  1. sizeof是c语言的一种运算符,C语言位运算和sizeof运算符详解

    位运算和sizeof运算符 C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有 ...

  2. 位运算和sizeof运算符

    位运算和sizeof运算符 C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有 ...

  3. java取余位运算_java位运算

    位移动运算符: < 例如:3 <<2(3为int型) 1)把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011, 2)把该数字高位(左侧 ...

  4. 对位运算 负数位运算的理解

    对位运算 负数位运算的理解 位运算大法好- 在这里,我拿洛谷P2104的题当作例题 题目: 小Z最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下 4 种基础运算: 运 ...

  5. java double 位运算_JAVA位运算等运算符总结

    JAVA位运算等运算符总结 一.概述 运算符是一种"功能"符号,用以通知 Java 进行相关的运算. Java 语言中常用的运算符可分为如下几种:算术运算符 赋值运算符 比较运算符 ...

  6. python左移位运算_python 移位运算符只能用于整型吗

    匿名用户 1级 2016-12-29 回答 什么是操作符? 简单的回答可以使用表达式4 + 5等于9,在这里4和5被称为操作数,+被称为操符. Python语言支持操作者有以下几种类型. 算术运算符 ...

  7. python写整数逆位运算_位运算

    a = 60 # 0011 1100 b = 13 # 0000 1101 运算符 描述 示例 & 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 a& ...

  8. 彻底搞清楚Java的位运算(位实现加减乘除)

    目录 •写在前面 •机器数和机器数的真值 •原码.反码和补码的基础概念和计算方法 原码 反码 补码 •java中的运算符 •不用乘除算乘除 加法 减法 乘法 除法 •写在前面 二进制位运算是最贴近计算 ...

  9. python与或非位运算_python位运算

    什么是位运算 位运算就是把数字当成二进制来进行计算,位运算有六种:&(与), |(或), ^(异或), ~(非), <>(右移) &(与) &运算规则:两个位都为1 ...

  10. 位运算以及位运算的应用

    位运算 什么是位运算 在计算机系统中,所有数据都是以二进制的形式进行存储,位运算就是对二进制中进行操作.所有的计算都是通过位运算进行实现的. 整数在计算机中 原码 原码是最简单的表示法,对于一个整数而 ...

最新文章

  1. java swing原理浅析
  2. JavaWeb-JavaMail邮件开发
  3. 深夜,先给自己记录个东西
  4. iOS中监测来电方案
  5. 用VC写Assembly代码(5) --函数调用(一)
  6. 南信大滨江学院计算机考试姜青山,【数据库原理】滨江学院姜青山 期末试卷知识点笔记整理 南京信息工程大学...
  7. 巧用PHP双$功能兼容线上线下配置文件
  8. 制作ext4 img的两种方式
  9. mysql内容_mysql 的基本内容
  10. DELL VENUE 11 7130解锁功耗墙总结
  11. 最新的中国姓氏重新洗牌:快来看看你的姓排第几?
  12. 你知道哪些中国学生普遍生疏但意境很美的英语词汇?
  13. H264BSAnalyzer 使用方法
  14. xampp如何设置多虚拟主机访问
  15. PHP教程电子版下载
  16. 2023全网首发抖音标签检测程序源码+花800买的/最新版本
  17. 2017字节跳动前端工程师秋招笔试试题解析
  18. unity之跳一跳(完整版)
  19. 三极管原理--我见过最通俗讲法
  20. 用google突破图书馆入口IP限制小技巧

热门文章

  1. 莫名其妙的“配置系统未能初始化”异常
  2. 单片机线选法存储印象(地址范围)方法+例题
  3. 5.14——教你把ssh抄成ssm
  4. 【新书推荐】【2018.11】海洋SAR遥感研究进展(第一版)
  5. 网络中的IP地址管理策略及其划分
  6. 支持复制粘贴word图片的KindEditor编辑器
  7. 多属性决策的权重确定方法及matlab 程序
  8. 【信息学奥赛一本通】题解大全
  9. 指针数组,数组指针,函数指针的区别
  10. 前端面试之ES5与ES6的区别