C语言学习点滴(四)

位运算表示按二进制进行的运算。

位运算首先理解二进制。二进制是指数字的每一位都是0或者1

位运算操作符<<(右移运算符) \ >>(左移运算符)

与(&)   0 & 0 = 0    1 & 0 = 0       0 & 1 = 0     1 & 1 = 1

或(|)      0 | 0 = 0      1 | 0 = 1        0 | 1 = 1        1 | 1 = 1

异或(^) 0 ^ 0 = 0     1 ^ 0 = 1       0 ^ 1 = 1      1 ^ 1 = 0

  1. 位移运算符

    位左移

    左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填0,最高位溢出并舍弃

例:
int a,b;
a = 5;
b =a<<2;       //a向左移动2位  
// a的二进制  00000101   向左移动2位就是  00010100 即b=20;

大家也许在这里会觉得很难计算,我说个我看到过的一个计算方法

二进制中左边多一位表示2的1次方 多2位表示2次方,依次计算

如果往左边移动几位那就乘以多少个2就行了

int a=85,b;
b=a<<3;
//a的二进制是 00000000 01010101  往左移动三位 00000101 01010000
这里b的值 = 85×2×2×2  = 680
大家可以用计算机算一下

2.右移运算符

这里同左移运算符相反,是将对应的数据的二进制值逐位右移若干位,并在空出的位置上填0,最高位补0

例:
int a, b;
a=5;
b=a>>2;
 //a向左移动2位  00000101     00000001
//则b=1

我们也可以用上面的方法来计算只不过只是除法

//当最高位是1,则根据计算机的系统,处理方式不一

复合运算

运算符 含义 描述
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
1、“按位与”运算符(&)

是指参加运算的的俩两个数据,按照二进制进行“与”运算,如果两个相应的二进制都位1,则该位的结果为1.否则为0

按位与运算 例:
 00000011(3)
&00000101 (5)
 00000001 (1)
 
 由此得知3&5=1
 
 我们可以用位与对存储单元清0
 #include <stdio.h>
 int main()
 {
     int a=5;
     a &= 0x00;
     return 0;
 }

按位或”运算符(|)
两个相应的二进制位中只要有一个为1,该位的结果值为1。借用逻辑学中或运算的话来说就是,一真为真

异或”运算符(^)
他的规则是:若参加运算的两个二进制位值相同则为0,否则为1

应用:
(1)使特定位翻转
设有数01111010(2),想使其低4位翻转,即1变0,0变1.可以将其与00001111(2)进行“异或”运算,

即:
 01111010
^00001111
 01110101
运算结果的低4位正好是原数低4位的翻转。可见,要使哪几位翻转就将与其进行∧运算的该几位置为1

即可。
(2) 交换两个值,不用临时变量
例如:a=3,即11(2);b=4,即100(2)。
想将a和b的值互换,可以用以下赋值语句实现:
    a=a∧b;
    b=b∧a;
    a=a∧b;
a=011(2)
    (∧)b=100(2)
a=111(2)(a∧b的结果,a已变成7)
    (∧)b=100(2)
b=011(2)(b∧a的结果,b已变成3)
    (∧)a=111(2)

a=100(2)(a∧b的结果,a已变成4)

4、“取反”运算符(~)
他是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。

时间: 2024-08-06 15:06:01

C语言学习点滴(四)的相关文章

Go语言学习笔记(四) [array、slices、map]

日期:2014年7月22日 一.array[数组] 1.定义:array 由 [n]<type> 定义,n 标示 array 的长度,而 <type> 标示希望存储的内容的类型. 例如: var arr[10] int arr[0] = 1 arr[1] = 2 数组值类型的:将一个数组赋值给 另一个数组,会复制所有的元素.另外,当向函数内传递一个数组的时候,它将获得一个数组的副本,而不是数组的指针. 2.数组的复合声明.a :=[3]int{1,2,3}或简写为a:=[...]i

C++语言学习(四)——类与对象

C++语言学习(四)--类与对象 一.构造函数(constructor) 1.构造函数简介 C++语言中,构造函数是与类名相同的特殊成员函数.在类对象创建时,自动调用构造函数,完成类对象的初始化.类对象本身是变量,在栈.堆上创建的对象,对象的成员初始化为随机值:在静态存储区创建的对象,对象的成员初始化为0. 2.构造函数的定义 构造函数声明的语法如下:classname(parameters);没有参数的构造函数称为无参构造函数.当类中没有定义构造函数(包括拷贝构造函数)时,编译器默认提供一个无

蓝鸥C语言学习第四天

今天主要学习数组,什么叫是数组呢? 数组:就是存放相同类型的若干变量的集合.数组属于构造类型. 一维数组的定义方式:类型  数组名[元素个数] = {元素1, 元素2, .........}; int a[5]; 注意:[]只能放在数组名的后面,下面的都是错误写法: 1 int a[5] a;// 错误 2 int[] b; // 错误 **[]里面的个数必须是一个固定值,可以是常量(比如7.10).常量表达式(比如3+4.5*7).绝对不能使用变量或者变量表达式来表示元素个数,大多数情况下不要

【GO】GO语言学习笔记四

流程控制 1.条件语句 举个栗子: if x>5 { return 1; }else{ return 0; } 注意: ? 条件语句不需要使用括号将条件包含起来();? 无论语句体内有几条语句,花括号{}都是必须存在的;? 左花括号{必须与if或者else处于同一行;? 在if之后,条件语句之前,可以添加变量初始化语句,使用;间隔;? 在有返回值的函数中,不允许将"最终的"return语句包含在if...else...结构中,否则会编译失败: function ends with

C语言学习入门 (四) 字符串、字符串数组、字符和字符串相关函数

字符串简介 * 在Java中,一个字符串可以用String类型来存储 String s = "MJ"; C语言中没有String这种类型.其实字符串就是字符序列,由多个字符组成,所以在C语言中,我们可以用字符数组来存储字符串. * 字符串可以看做是一个特殊的字符数组,为了跟普通的字符数组区分开来,应该在字符串的尾部添加了一个结束标志'\0'. '\0'是一个ASCII码值为0的字符,是一个空操作符,表示什么也不干.所以采用字符数组存放字符串,赋值时应包含结束标志'\0'. * 字符串&

Swift语言学习(四)字符串与Array等集合的使用

Swift 提供了C和Objective-C基础类型的自己一套版本,包括用于整型的Int,用于浮点值的Double和Float,用于布尔值的Boolean,和用于文本数据的String.Swift还提供了Array和Dictionary这两种集合类型的增强版本. 我们知道在iOS开发中用的最多的基础类型可能就数字符串了,以及一些集合类型的使用,下面我们来简单学习下字符串String以及Array.Dictionary等集合类型的使用方法 一.字符串  1.字符串的字面量 , 例如"jeck&qu

C语言学习笔记(四) 运算符优先级

C语言中有很多运算符,除了四则运算,还有位运算.比较运算.逻辑运算.赋值运算等等,令人眼花缭乱的同时,优先级也让人头疼.通常建议在写代码的时候不用省略括号,但是并不是所有程序员都会按照这个规矩来,因此还是有必要记录一下,以备查阅. 下面表格中详细记录了各种运算符的优先级.没有必要死记硬背这张表,代码见多了用多了就慢慢记得了.总结几个比较重要的原则: 取成员的"0"目运算符[() . -> []]优先级最高: 单目运算符高于双目运算符: 四则运算高于移位运算: 移位运算高于比较运算

GO语言学习(四)GO语言语言结构

Go Hello World 实例 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注释 接下来让我们来看下简单的代码,该代码输出了"Hello World!": package main import "fmt" func main() { /* 这是我的第一个简单的程序 */ fmt.Println("Hello, World!") } 注意 需要注意的是 { 不能单独放在一行,所以以下代码在运行时

Python语言学习 (四)1.1

经典类,新式类 经典类是指没有继承的,新式类是继承了的.现在基本是新式类. #encoding=utf-8 #经典类class Dog: pass #继承了object,为新式类class DogNew(object): pass #可输出此类是什么类型的类print type(Dog)print type(DogNew) class Heibei(Dog): pass class Bomei(DogNew): pass print type(Heibei)print type(Bomei) 结