第一讲c语言复习内容摘要:

1, 1变成 0。 例如,表达式“ ~21” 的值是无符号整型数 0xffffffea 21: 0000 0000 0000 0000 0000 0000 0001 0101 ~21: 1111 1111 1111 1111 1111 1111 1110 1010 而下面的语句: printf(%d,%u,%x,~21,~21,~21)。 输出结果就是 : 22,4294967274,ffffffea 按位非 左移运算符“ ” 是双目运算符。 其计算结果是将左操作数的各二进位全部左移若干位后得到的值,右操作数指明了要左移的位数。 左移时, 高位丢弃,低位补 0。 左移运算符不会改变左操作数的值。 左移运算符 例如,常数 9有 32位,其二进制表示是: 0000 0000 0000 0000 0000 0000 0000 1001 因此,表达式“ 94” 的值,就是将上面的二进制数左移 4位,得: 0000 0000 0000 0000 0000 0000 1001 0000 即为十进制的 144。 实际上,左移 1位,就等于是乘以 2,左移 n位,就等于是乘以 2n。 而左移操作比乘法操作快得多。 左移运算符 include main() { int n1 = 15。 short n2 = 15。 unsigned short n3 = 15。 unsigned char c = 15。 n1 = 15。 n2 = 15。 n3 = 15。 c = 6。 printf( n1=%x,n2=%d,n3=%d,c=%x,c4=%d, n1,n2,n3,c,c 4)。 } 上面程序的输出结果是 : n1=78000,n2=32768,n3=32768,c=c0,c4=3072 n1: 0000 0000 0000 0000 0000 0000 0000 1111 n2: 0000 0000 0000 1111 n3: 0000 0000 0000 1111 c: 0000 1111 n1 = 15: (变成 78000) 0000 0000 0000 0111 1000 0000 0000 0000 n2 = 15: ,(变成 32768) 1000 0000 0000 0000 n3 = 15: (变成 32768) 1000 0000 0000 0000 c = 6。 (变成 c0) 1100 0000 c 4 这个表达式是先将 c 转换成整型 0000 0000 0000 0000 0000 0000 1100 0000 然后再左移。 c4=3072 右移运算符“ ” 是双目运算符。 其计算结果是把“ ” 的左操作数的各二进位全部右移若干位后得到的值,要移动的位数就是“ ” 的右操作数。 移出最右边的位就被丢弃。 对于有符号数,如 long,int,short,char类型变量,在右移时,符号位(即最高位)将一起移动,并且大多数 C/C++编译器规定, 如果原符号位为 1,则右移时高位就补充 1,原符号位为 0,则右移时高位就补充 0。 右移运算符 对于无符号数 ,如 unsigned long,unsigned int, unsigned short, unsigned char类型的变量,则 右移时,高位总是补 0。 右移运算符不会改变左操作数的值。 实际上, 右移 n位,就相当于左操作数除以 2n,并且将结果往小里取整。 25 4 = 2 2 4 = 1 18 4 = 1 右移运算符 include int main() { int n1 = 15。 short n2 = 15。 unsigned short n3 = 0xffe0。 unsigned char c = 15。 n1 = n12。 n2 = 3。 n3 = 4。 c = 3。 printf( n1=%d,n2=%d,n3=%x,c=%x,n1,n2,n3,c)。 } 上面的程序输出结果是: n1=3,n2=2,n3=ffe,c=1 n1: 0000 0000 0000 0000 0000 0000 0000 1111 n2: 1111 1111 1111 0001 n3: 1111 1111 1110 0000 c: 0000 1111 n1 = 2: 变成 3 0000 0000 0000 0000 0000 0000 0000 0011 n2 = 3: 变成 2 1111 1111 1111 1110 n3 = 4: 变成 ffe 0000 1111 1111 1110 c = 3。 变成 1 0000 0001 思考题: 有两个 int型的变量 a和 n(0 = n = 31), 要求写一个表达式,使该表达式的值和 a的第 n位相同。 答案: ( a n ) amp。 1 或: (a amp。 (1 n )) n 函数 ,定义和调用 函数 (1) 大的任务分成若干小的任务 (函数 ) (2) 函数可以把不需要了解的细节隐藏起来 (3) 一般一个函数不要超过 50行代码 (4) 函 数先声明,再调用。 定 义可以看做声明 (5) 一般定义函数放在 .cpp中,声明放在 .h中 (7) 对于每个程序,都要定义一个 main()函数,它是C/C++程序 开 始执行时调用的 第一个 函 数 . main()在调用其他的函数来完成程序的任务 (8) 程序中函数通信 通过 参数 、 返回值、全局对象 来完成 (6) 函数声明 由返回类型、函数名和参数组成 重点要掌握: 1. 参数列表 的作用 (编译器会把参数列表和函数名混合在一起,形成新的名字 ),正因为最后的函数命不同, 函数重载 才能实现 .(C语言不允许函数同名 ) 2. 参数传递的过程与实质 3. 返回值的实际过程 函数 函数 函数声明 (一般写在 .h头文件中) 返回值类型 函数名 (参数 1类型 参数 1名称 , 参数 2类型 参数名称 , …)。 int YwkMax( int a, int int b)。 函数定义 (一般写在 .cpp文件中) int YwkMax( int a, int b ) { int c。 if ( ab ) c = a。 else c = b。 return c。 } 函数 默认参数 对于某些函数,程序往往会用一些 固定的值 去调用它 .例如对于以某种数制输出整型数的函数 print: void print(int value, int base)。 在大多数情况下都是以十进制输出,因此 base的值总是为 10。 C++在定义或声明函数时可以为函数的某个参数指定默认值。 当调用函数时 没有为它指定实际参数时 ,系统自动将默认值赋给形式参数。 例如,可以将 print函数声明为 void print(int value, int base=10)。 调用 print(20) 等价于 print(20, 10) 注意事项  缺省参数无论有几个,都必须放在参数序列的最后, 例如: int SaveName (char *first, char second = “”,char *third = “”, char *fouth = “”)。  在函数调用时,若某个参数省略,则其后的参数皆应省略而取其缺省值 函数 默认参数 对参数默认值的指定只有在函数声明处有意义。 因为函数的默认值是提供给调用者使用的。 函数 参数默认值 函数参数的默认值 int Function( int a=2 )。 int Max( int a, int b )。 int a, b。 void Function2( int x, int y=Max(a,b), int z=a*b ) {…} Function2( 4 )。 Function2( 4, 9 )。 Function2( 4, 2, 3 )。 Function2( 4, , 3 )。 等价于 Function2(4, Max(a,b), a*b) // 错误 在函数声明时,指定参数的默认值 默认值的顺序,从右往左的顺序定义 调用时,默认值的顺序。 函数 参数默认值 为什么要默认值。 所有的函数都使用程序运行栈中分配的存储区。 该存储区一直保持与该函数相关联,直到函数结束为止。 那时,存储区将自动释放以便重新使用。 该函数的整个存储区称为 活动记录 . 系统在函数的活动记录中为函数的每个参数都提供了存储区。 参数的存储区长度由它的类型来决定。 参数传递 是指用函数调用的实参值初始化函数参数存储区的过程。 C++中参数传递的缺省初始化方法是把 实参的值拷贝到参数的存储区中。 这种称为按值传递(passbyvalue) 函数 参数传递 函数 参数传递 三种形式 传值调用 传地址 (本质也是传值 ) 引用传递 函数 变量生命周期 /作用域 int Max( int a, int b ) { int c。 if ( ab ) c = a。 else c = b。 ret。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。