c语言 位运算和位运算符
位运算符 | 含义 |
---|---|
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
~ | 取反 |
<< | 左移 |
>> | 右移 |
位运算符中除了~,其他均为二元运算符,需要两个操作数;
操作数可以是整型和字符型,单数不能为浮点型;
按位与:
有假即假
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语言 位运算和位运算符相关推荐
- sizeof是c语言的一种运算符,C语言位运算和sizeof运算符详解
位运算和sizeof运算符 C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有 ...
- 位运算和sizeof运算符
位运算和sizeof运算符 C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有 ...
- java取余位运算_java位运算
位移动运算符: < 例如:3 <<2(3为int型) 1)把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011, 2)把该数字高位(左侧 ...
- 对位运算 负数位运算的理解
对位运算 负数位运算的理解 位运算大法好- 在这里,我拿洛谷P2104的题当作例题 题目: 小Z最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下 4 种基础运算: 运 ...
- java double 位运算_JAVA位运算等运算符总结
JAVA位运算等运算符总结 一.概述 运算符是一种"功能"符号,用以通知 Java 进行相关的运算. Java 语言中常用的运算符可分为如下几种:算术运算符 赋值运算符 比较运算符 ...
- python左移位运算_python 移位运算符只能用于整型吗
匿名用户 1级 2016-12-29 回答 什么是操作符? 简单的回答可以使用表达式4 + 5等于9,在这里4和5被称为操作数,+被称为操符. Python语言支持操作者有以下几种类型. 算术运算符 ...
- python写整数逆位运算_位运算
a = 60 # 0011 1100 b = 13 # 0000 1101 运算符 描述 示例 & 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 a& ...
- 彻底搞清楚Java的位运算(位实现加减乘除)
目录 •写在前面 •机器数和机器数的真值 •原码.反码和补码的基础概念和计算方法 原码 反码 补码 •java中的运算符 •不用乘除算乘除 加法 减法 乘法 除法 •写在前面 二进制位运算是最贴近计算 ...
- python与或非位运算_python位运算
什么是位运算 位运算就是把数字当成二进制来进行计算,位运算有六种:&(与), |(或), ^(异或), ~(非), <>(右移) &(与) &运算规则:两个位都为1 ...
- 位运算以及位运算的应用
位运算 什么是位运算 在计算机系统中,所有数据都是以二进制的形式进行存储,位运算就是对二进制中进行操作.所有的计算都是通过位运算进行实现的. 整数在计算机中 原码 原码是最简单的表示法,对于一个整数而 ...
最新文章
- java swing原理浅析
- JavaWeb-JavaMail邮件开发
- 深夜,先给自己记录个东西
- iOS中监测来电方案
- 用VC写Assembly代码(5) --函数调用(一)
- 南信大滨江学院计算机考试姜青山,【数据库原理】滨江学院姜青山 期末试卷知识点笔记整理 南京信息工程大学...
- 巧用PHP双$功能兼容线上线下配置文件
- 制作ext4 img的两种方式
- mysql内容_mysql 的基本内容
- DELL VENUE 11 7130解锁功耗墙总结
- 最新的中国姓氏重新洗牌:快来看看你的姓排第几?
- 你知道哪些中国学生普遍生疏但意境很美的英语词汇?
- H264BSAnalyzer 使用方法
- xampp如何设置多虚拟主机访问
- PHP教程电子版下载
- 2023全网首发抖音标签检测程序源码+花800买的/最新版本
- 2017字节跳动前端工程师秋招笔试试题解析
- unity之跳一跳(完整版)
- 三极管原理--我见过最通俗讲法
- 用google突破图书馆入口IP限制小技巧