C语言中的移位操作.doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言中的移位操作 时间:2010-12-08 C语言中的移位操作,内容不多。不过有些地方你不注意,就疏忽了。 先做两个小题先。 (1)unsigned char x=3; x1是多少?x1是多少? (2)char x=3; x1是多少?x1是多少? (3)char x=-3; x1是多少?x1是多少? 3写成二进制数-3写成二进制数是(补码 程序执行的时候,操作的是数值的编码表示,也就是数值在内存中的二进制表示。比如说,程序取-3的时候,就去 (1)对无符号数3来说,x1往左移一位,最左边的位移掉了,最右边的移进来的位补零。变所以结果是6;x1往右边移一位,由于是无符号数,所以逻辑右移,最右边一位移掉,最左边移进来的位补零,变所以结果是1。 (2)对于有符号数3来说,x1往左移一位,最左边的位移掉了,最右边的移进来的位补零。变所以结果是6;x1往右边移一位,由于是有符号数,可能发生逻辑右移,也可能发生算术右移,这一点,C标准并没有明确地指定是使用逻辑右移还是算术右移。但大多数的机器都使用算术右移,变所以结果还是1。但是请注意,这只是说大多数的机器是这样的,你敢保证自己不会碰到特殊情况吗? (3)对于有符号数-3来说,x1往左移一位,最左边的位移掉了,最右边的移进来的位补零。变结果是-6。往右移一位,由于是有符号数,可能发生逻辑右移,也可能发生算术右移。大多数机器使用算术右移,变结果是-2。 总结:左移时总是移位和补零。右移时无符号数是移位和补零,此时称为逻辑右移;而有符号数大多数情况下是移位和补最左边的位(也就是补最高有效位),移几位就补几位,此时称为算术右移。 附打印内存中字节编码的代码: void print_char(char x) {  unsigned char * bp=(unsigned char *)x;  int size=sizeof(x);  for(int i=0; isize; i++)     printf(%.2x, bp[i]);  printf( ); } 可以自己实践实践阿。 C的优势 时间:2010-11-24 C的优势 汇编程序同样需要调用子程序(函数),抛开语言的差异,其逻辑结构应该是一样的。同样的汇编也需要“大量”使用堆栈,这一点汇编没有任何优越性。 包括所有的C51在内的大多数单片机的C语言都不是在堆栈上传递函数,而是由编译器静态分配。 由于C语言更加接近自然语言,如果编译器没有BUG,同样结构下C语言一定比汇编可靠。 最后一句:C的局部变量是可以覆盖的,汇编的所有变量都是全局的,C不仅仅效率高,而且因为局部变量的不可见性所以更可靠。 c代码--快速排序问题 时间:2010-11-24 csdn博客 邹勇军 void quicksort(sqlist l,int low,int high) {int i,j; if(lowhigh) {i=low;j=high;l.r[0]=l.r[i]; do { while(ijl.r[j].keyl.r[0].key) --j; if(ij) {l.r[i]=l.r[j];++i;} while(ijl.r[i].key=l.r[0].key) ++i; if(ij){ l.r[j]=l.r[i];--j; } }while(i!=j); l.r[i]=l.r[0]; quicksort(l,low,i-1); quicksort(l,i+1,high); } } C语言计算奖金发放实例 时间:2010-11-11 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf(%ld,i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=b

文档评论(0)

7ky170ms8 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档