#include#include#defineEPS1e-7voidmain(){doubleudf_sin(doublex);//用户自定义函数原型说明doublea;scanf("%lf",&a);printf("%f%f\n",udf_sin(a),sin(a));}doubleudf_sin(doublex){//用户自定义函数doublesum,term,n=1;sum=term=x;while(fabs(term)>EPS){n=n+1;term=term*(-x*x)/((2*n-2)*(2*n-1));信息科学技术学院C语言程序设计教学组培育英才钻研科学第十章第十章位运算★内容提要:位逻辑运算移位运算复合位运算位段位逻辑运算移位运算复合位运算位段位运算是指对操作数以二进制位(bit)为单位进行数据加工。C语言的位运算功能有:位逻辑运算(四种);位移操作(两种)。参加位操作的操作数必须是整型常量或变量。一、位逻辑运算:位逻辑运算种类运算符名称例子功能~位反~b求b的位反&位与b&c求b和c的位与|位或b|c求b和c的位或^位异或b^c求b和c的位异或运算符名称例子功能~位反~b求b的位反&位与b&c求b和c的位与|位或b|c求b和c的位或^位异或b^c求b和c的位异或运算符运算符名称名称例子例子功能功能~位反位反~b~b求b的位反求b的位反&位与位与b&cb&c求b和c的位与求b和c的位与|位或位或b|cb|c求b和c的位或求b和c的位或^位异或位异或b^cb^c求b和c的位异或求b和c的位异或1.位反运算位反运算是单项运算,它是把一个操作数按位求反,即操作数的各个二进制位为1时变换为0,为0时变换成1。例[10-1]:将变量a按位求反赋予变量b。voidmain(){unsignedchara,b;a=0x9a;b=~a;printf("a:0x%xb:0x%x\n",a,b);}voidmain(){unsignedchara,b;a=0x9a;b=~a;printf("a:0x%xb:0x%x\n",a,b);}10011010a1001101010011010a运行结果:a:0x9ab:0x6501100101bb=~a0110010101100101bb=~a2.位与、位或和位异或是对两个操作数的对应二进制位进行运算。a位b位a&b位与a|b位或a^b位异或11001010100011100110a位b位a&b位与a|b位或a^b位异或11001010100011100110a位a位b位b位a&b位与a&b位与a|b位或a|b位或a^b位异或a^b位异或1100110010101010100010001110111001100110位逻辑运算种类例[10-2]:位逻辑运算。voidmain(){unsignedchara,b;a=0xb9;b=0x83;printf("aandb:0x%x\n",a&b);printf("aandb:0x%x\n",a|b);printf("aandb:0x%x\n",a^b);}运行结果:aandb:0x81aandb:0xbbaandb:0x3a10111001a:0xb910000011b:0x83a&b10000001结果:0x811011100110111001a:0xb91000001110000011b:0x83a&b1000000110000001结果:0x8110111001a:0xb910000011b:0x83a|b10111011结果:0xbb1011100110111001a:0xb91000001110000011b:0x83a|b1011101110111011结果:0xbb0011101000111010结果:0x3a1011100110111001a:0xb91000001110000011b:0x83a^b注意:对一个操作数的位运算并不改变操作数本身的数值。二、移位操作移位操作是对操作数以二进制位(bit)为单位进行左移或右移。它们是双目运算符。形式:〈操作数〉移位运算符〈移动的位数〉运算种类运算符名称例子运算功能>>右移位b>>3b右移3位<<左移位c<<2b左移2位运算符名称例子运算功能>>右移位b>>3b右移3位<<左移位c<<2b左移2位运算符运算符名称名称例子例子运算功能运算功能>>>>右移位右移位b>>3b>>3b右移3位b右移3位<<<<左移位左移位c<<2c<<2b左移2位b左移2位例[10-3]:左移位操作。voidmain(){unsignedchara,b;a=0x1b;b=a<<2;printf("0x%xleft_shift2bit:0x%x\n",a,b);}运行结果:0x1bleft_shift2bit:0x6c00011011a:0x1b01101100b:0x6c舍弃补零b=a<<20001101100011011a:0x1b0110110001101100b:0x6c舍弃补零b=a<<2说明:1)左移位操作中,操作数移位后,右端出现的空格补0,而移至左端之外的位舍去,不管其是否为符号位。00011011a:0x1b01101100b:0x6c舍弃补零b=a<<20001101100011011a:0x1b0110110001101100b:0x6c舍弃补零b=a<<2说明:2)每向左移一位,相当于该数乘2。3)右移位操作与操作数的数据类型是否带有符号有关:00011011a:0x1b01101100b:0x6c舍弃补零b=a<<20001101100011011a:0x1b0110110001101100b:0x6c舍弃补零b=a<<2不带符号的操作数右移位时,左端出现的空位补零。带符号的操作数右移位时,左端出现的空位按原最左端的位复制,无论什么...