1、在指定位置插入结点的操作
void indert(void)
{ char numstr[20];
if (head==NULL)
return;
this=heae;
printf(“input num”);
gets(numstr);
do
{ if (this->num==atol(numstr))
{ new=(struct stud *)malloc(sizeof(struct stud));
new->next=this->next;
this-next=new;
gets(new->name);
, }
this=this->next;
}while(this!=NULL);
}
2、删除指定结点的操作
void delete(void)
{ char numstr[20];
if (head==NULL)
return;
this=heae;new=this;
printf(“input num”);
gets(numstr);
do
{ if (new->num==atol(numstr))
if ( head==new)
head=new->next;
else
this->next=new->next;
this=new;
new=new->next;
}while(new!=NULL); }
本次课内容:位运算概述和位运算使用方法
教学目的:掌握相关概念、定义、运算符和引用方法。
重点:相关概念,运算符、定义、引用。
难点:引用及特殊环境的引用。
预习,
二进制表示方法,原码、反码和补码。
有符号数和无符号数。
一、位运算概述
1、位状态和位运算
(1)数据以二进制表示时的信号每一位的 0或 1的状态,称为一个
“位” (bit)的状态。
如,10011001
(2)对数据的某些位进行的操作。如:接位取反等。
2、运算符
位运算符 含义 举例
~ 按位取反 ~a,对变量 a中全部位取反
<< 左移 a<<2,a中各位全部左移 2位
>> 右移 a>>2,a中各位全部右移 2 位
& 按位与 a&b,a和 b中各位按位进行“与”运算
| 按位或 a | b, a和 b各位按位进行“或”运算
^ 按位异或 a^b,a和 b中各位按位进行“异或”运
算
位运算赋值操作
运算符 含义 举例 等价于
&= 位与赋值 a&=b a=a&b
|= 位或赋值 a | =b a= a | b
^= 位异或赋值 a^=b a=a^b
>>= 右移赋值 a>>=b a=a>>b
<<= 左移赋值 a<<=b a=a<<b
二、位运算使用方法
1、与运算 (char a,b;)
如,a= 0 0 0 0 1 0 0 0 a= 1 1 1 1 1 0 0 0
& b= 0 0 0 1 1 0 0 0 &b= 0 0 0 1 1 0 0 0
a&b= 0 0 0 0 1 0 0 0 a&b= 0 0 0 1 1 0 0 0
屏蔽高四位 屏蔽低四位
a=0x6A,b=0x0F a= - 0x6A,b=0xF0
a= 0 1 1 0 1 0 1 0 a= 0 1 1 0 1 0 1 0
& b= 0 0 0 0 1 1 1 1 &b= 1 1 1 1 0 0 0 0
a&b= 0 0 0 0 1 0 1 0 a&b= 0 1 1 0 0 0 0 0
a=8,b=24 a= - 0x08,b=0x18
2、或运算 ( char a,b )
如,a= 0 0 0 0 1 0 0 0
( | ) b= 0 0 0 1 1 0 0 0
a | b= 0 0 0 1 1 0 0 0
若保留某些位的值,与运算中用,1”来处理,在或运算中则用,0”
来处理。
如,a= 0 1 0 0 1 0 1 0 a= 1 1 1 1 1 0 0 0
( | ) b= 1 0 0 1 0 0 0 0 ( | )b= 0 0 0 0 1 0 1 0
a | b= 1 1 0 1 1 0 1 0 a | b= 1 1 1 1 1 0 1 0
3、异或运算 ( char a,b )
如,a= 0 0 0 1 0 0 0 0
^ b= 0 0 1 1 0 1 0 1
a ^ b= 0 0 1 0 0 1 0 1
如,a= 0 1 0 0 1 0 1 0 a= 0 1 0 0 1 0 1 0
^b= 0 0 0 0 1 1 1 1 ^b= 1 1 1 1 0 0 0 0
a ^ b= 0 1 0 0 0 1 0 1 a ^ b= 1 0 1 1 1 0 1 0
结果中 a低四位不变 结果中 a高四位不变
结果中 a低四位取反 结果中 a高四位取反
4、取反运算 ( char a,b )
单目运算
如,a=0 0 0 0 0 0 1 1
~ a=1 1 1 1 1 1 0 0
5、左移运算
如,a = 1 0 0 0 0 1 0 1
a<<2= 1 0 0 0 0 1 0 1 0 0
丢失 补入
注,左移一位,相当于乘 2,左移两位,相当于乘 4。
5、右移运算
如,a = 1 0 0 0 0 1 0 1
a>>2= 0 0 1 0 0 0 0 1 0 1
补入 丢失
注,右移一位,相当于除 2,右移两位,相当于除 4。
说明,1、对于无符号的 int 型或 char型 数据,右移时左端补零。
2、对带符号的 int 型或 char型数据,符号位为 0,则左端补 0,
符号位为 1(负数),则左端补 1。机器中负数以补码形式表示。
小结,
1、位运算符
2、位运算的引用
3、位移位的意义及移位时补入位的补入原则
作业,P274_7.4, P292_8.1,8.2,8.3