1、在指定位置插入结点的操作 void inert(void i char numstr[20]; if (head==nULl return; IS-heae, printf("input num”); gets(numstr); do i if (this->num-==atol(numstr)) i new=(struct stud*)malloc(sizeof(struct stud) new->next=this->next this-next=new: gets(new->name); this=this->next: ) while(this!=NULL)
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) i char numstr[]; if (head==nUll return; this=heae: new=this: printf("input num”); gets(numstr); d f if (new->num==atol(numstr)) if head==new) head=new->next else this->next=new->next this=new; new=new->next )while(new!=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的状态,称为一个 “位”(bi的状态。 如:10011001 (2)对数据的某些位进行的操作。如:接位取反等。 2、运算符 位运算符含义 举例 按位取反~a,对变量a中全部位取反 左移 a2,a中各位全部右移2位 & 按位与 a&b,a和b中各位按位进行“与”运算 按位或 a|b,a和b各位按位进行“或”运算 按位异或a^b,a和b中各位按位进行“异或”运 算
一、位运算概述 1、位状态和位运算 (1)数据以二进制表示时的信号每一位的0或1的状态,称为一个 “位”(bit)的状态。 如:10011001 (2)对数据的某些位进行的操作。如:接位取反等。 2、运算符 位运算符 含义 举例 ~ 按位取反 ~a,对变量a中全部位取反 > 右移 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 << 左移赋值<<=b a=a<<b 二、位运算使用方法 1、与运算( char a,b;) a=8.b=24 a=-0x08,b=0x18 如: a=00001000 a=11111000 &b=00011000 &b=00011000 a&b=00001000 a&b=00011000 屏蔽高四位 屏蔽低四位 a=Ox6A.b=OXOF a=-Ox6A.b=OxFO a=01101010 a=01101010 &b=00001111 &b=11110000 a&b=00001010 acb=01100000
位运算赋值操作 运算符 含义 举例 等价于 &= 位与赋值 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=00001000 |)b=00011000 a|b=00011000 若保留某些位的值,与运算中用“1”来处理,在或运算中则用“0 来处理。结果中a低四位不变 结果中a高四位不变 如 a=01001010 a=11111000 (|)b=10010000 )b=00001010 a|b=11011010 a|b=I1111010 3、异或运算( char a,b) 如: a=00010000 b=00110101 a^b=00100101 结果中a低四位取反 结果中a高四位取反 如: a=01001010 a=01001010 b=00001111 ^b=11110000 a^b=01000101 a^b=10111010
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=00000011 a=11111100 5、左移运算 如 a 10000101 a>2= 001000010 补入 丢失 注:右移一位,相当于除2,右移两位,相当于除4。 说明:1、对于无符号的int型或char型数据,右移时左端补零。 2、对带符号的int型或char型数据,符号位为0,则左端补0 符号位为1(负数),则左端补1。机器中负数以补码形式表示
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= 0 0 1 0 0 0 0 1 0 1 补入 丢失 注:右移一位,相当于除2,右移两位,相当于除4。 说明:1、对于无符号的int 型或char型 数据,右移时左端补零。 2、对带符号的int 型或char型数据,符号位为0,则左端补0, 符号位为1(负数),则左端补1。机器中负数以补码形式表示
小结 位运算符 2、位运算的引用 3、位移位的意义及移位时补入位的补入原则 作业:P2747.4、P2928.1、8.,2、8.3
小结: 1、位运算符 2、位运算的引用 3、位移位的意义及移位时补入位的补入原则 作业:P274_7.4 、P292_8.1、8.2、8.3