【C语言天天练(二二)】位操作
C的位运算符
1、二进制反码或按位取反:~
~(10011010) = (01100101)。
假设val是一个unsigned char,~val不改名原来val的值。
2、位与:&
二进制运算符&通过对两个操作数逐位进行比較产生一个新值。
(10010011)&(00111101)=(00010001)。
C中的一个组合的位与赋值运算符:&=。
3、位或:|
二进制运算符|通过对两个操作数逐位进行比較产生一个新值。
(10010011)|(00111101)=(10111111)。
C中的一个组合的位或赋值运算符:|=。
4、位异或:^
二进制运算符^对两个操作数逐位进行比較。对于每一个位,假设操作数中相应位有一个为1。结果为1。
(100100011)^(00111101)=(10101110)。
C中有一个组合的位异或赋值运算符:^=。
5、掩码:“位与”运算符通常跟掩码一起使用。
掩码是某些位设为开(1)而某些位设置为关(0)的位组合。
flags = flags & MASK。
6、打开位。
如。对于flags。想要打开它的第二位,能够使用flags = flags | (1<<2).
7、关闭位。如,对于flags。想要关闭它的第二位,能够使用flags = flags & (~(1<<2))。
8、转置位。
转置一个位表示假设该位打开。则关闭该位。假设该位关闭,则打开该位。
如。对于flags,想要转置它的第二位,能够使用flags = flags ^ (1<<2)。
9、移位运算符。
左移:<<。右移:>>。左移运算符<<将其左側操作数的值的每位向左移动,移动的位数由其右側操作数指定。
空出的位用0填充,而且丢弃移出左側操作数末端的位。
右側位运算符>>将其左側操作数的值的每位向右移动,移动的位数由其右側操作数指定。丢弃移出左側操作数右端的位。
10、移位运算符:移位运算符能够提供快捷、高效的对2的幂的乘法和除法。
number << n : number乘以2的n次幂。
number >> n : 假设number非负,则用number除以2的n次幂。
【C语言天天练(二二)】位操作的更多相关文章
- 【C语言天天练(二四)】内存分配
引言: 对于C语言程序,了解它执行时在内存中是怎样分配的对于我们理解它的执行机制是很实用的.以下就总结一下C语言程序的一些内存分配知识. 一 一段C程序.编译连接后形成的可运行文件一般有代码段.数据段 ...
- 【C语言天天练(二)】statickeyword
引言: statickeyword不仅能够修饰变量.并且能够修饰函数.了解它的使用方法,不仅对阅读别人的代码有帮助,也有助于自己写出更加健壮的程序. 使用方法: ...
- 【C语言天天练(二一)】内联函数
引言:调用函数时,一般会由于建立调用.传递參数.跳转到函数代码并返回等花费掉一些时间,C语言的解决的方法是使用类函数宏.在C99中,还提出了第二种方法:内联函数. 内联 ...
- 【C语言天天练(二)】预处理
引言: 学C语言之初.一提到预处理,脑子里想到的就是#define的宏定义以及#include包括的头文件.后来随着对C的深入学习发现.预处理不止这些.比方条件编译.提前定义的宏等等.以下对此进行总结 ...
- 【C语言天天练(十一)】深入理解指针
引言:在C语言中.指针的地位是不言而喻的,要想非常好的掌握C语言,掌握指针是必须的,这也是C语言不同于其它语言的地方. (一)指针的指针 样例: int i; int *pi;/*把pi初始化为指向变 ...
- 【C语言天天练(二三)】errno变量
引言: 在C编程中,errno是个必不可少的变量.特别是在网络编程中. 假设你没实用过errno,那仅仅能说明你的程序不够健壮. 为什么会使用errno呢?这是系统库设计中的一个无奈之举.他很多其它的 ...
- 【C语言天天练(九)】动态内存分配
引言:数组的元素存储于内存中连续的位置上.当一个数组被声明时.它所须要的内存在编译时就被分配. 可是,我们能够使用动态内存分配在执行时为它分配内存. 一块内存的生命周期能够分为四个阶段:分配.初始化. ...
- 【C语言天天练(十五)】字符串输入函数fgets、gets和scanf
引言:假设想把一个字符串读到程序中.必须首先预留存储字符串的空间.然后使用输入函数来获取这个字符串. 读取字符串输入的第一件事是建立一个空间以存放读入的字符串. char *name; scanf(& ...
- 【C语言天天练(三)】typedef具体解释
引言: typedef能够看作type define的缩写,顾名思义就是类型定义,也就是说它仅仅是给已有的类型又一次定义了一个方便使用的别名.并没有产生新的数据类型. typedef与define的不 ...
随机推荐
- Quartz大致介绍(一)
1. 介绍 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先确定(被纳 ...
- 笔记本(华硕UL80VT)软件超频setFSB
Warning !!!If you are a beginner, do not use this software. This software is for power users only. U ...
- groovy实现循环、交换变量、多赋值、?.运算符
/** * Created by Jxy on 2019/1/3 10:01 * 1.实现循环的方式 * 2.安全导航操作符---?. * 3.一次性赋值给多个变量 */ 0.upto(2){ pri ...
- Mac PHPStorm快捷键总结
全局搜索(command + shift + F) 显示类中的方法 (command + 7) 函数追踪 (command +鼠标点击) 单行注释/取消(command + /) 输入行号跳到某一行( ...
- C# 调用C++DLL 类型转换
内容转自网上····这里做 备份··· 原文链接: http://blog.csdn.net/miss_easy/article/details/52470964 /C++中的DLL函数原型为 //e ...
- <meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">的作用
本人对该标签理解不深,这里是复制了穆乙的文章:如果有人进来看到这篇文章,请按此https://www.cnblogs.com/pigtail/archive/2013/03/15/2961631.ht ...
- css的一些基础(一)
定位 定位相关属性用于设置目标组件的位置,常用的定位相关属性如下. 属性 说明 值 position 设置定位方法 static.relative.absolute.fixed left ri ...
- PoPo数据可视化周刊第5期
PoPo数据可视化 聚焦于Web数据可视化与可视化交互领域,发现可视化领域有意思的内容.不想错过可视化领域的精彩内容, 就快快关注我们吧 :) World Wire 数据可视化演示(视频) IBM公司 ...
- BZOJ1149 [CTSC2007]风玲
Description Input Output 输出仅包含一个整数.表示最少需要多少次交换能使风铃满足Ike的条件.如果不可能满足,输出-1. Sample Input 6 2 3 -1 4 5 6 ...
- Maven学习总结(一):基本概念
一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1.1. ...