C语言 题目:从一个正整数a中把从右端开始的4~7位取出来。

作者&投稿:辟梵 (若有异议请与网页底部的电邮联系)
请问“从一个整数a中把从右端开始的4~7位取出来”中的“4~7”具体表示什么意思?~

按照八进制读入a以后:b=a>>4; // a是11011001,a>>4就是11111101(8位数都向右移动4位,首四位补a的最高位的值(这里是1))
c=~(~0<<4); // 0是00000000,所以~0是11111111,那么~0<<4就是11110000(8位数都向右移动4位,首四位补0)
d=b&c; // 由于b是11111101,c是11110000,所以b&c是11110000(每一位就逻辑与一下)

这个整数肯定要不少于7位数才行,意思就是说,你随便拿一个整数A,然后取出(从这个整数的个位数向百位数的方向数起)第4位,第5位,第6位和第7位数字出来。

不知道你题目是要10进制还是2进制,看已经有人给你写2进制了。那我写个10进制好了。

题目1:有2种方法,一是数值运算,二是转成字符串截取

至于题2位移,用方法2字符串都截取了,和原字符串重组一下就好了,我就不写了。

#include <stdio.h>
 #include <string.h>
 int getRByNum(int a,int w);//从a右边开始取w位数,返回整数
 int getRByString(int a,int w);
 int main()
 {
     int a=12345678,w;
     printf("整数%d,从右往左取,要取几位?:",a);
     scanf("%d",&w);
     printf("方法一:直接通过整数运算取得后%d位为:%d
",w,getRByNum(a,w));
     printf("方法二:通过转换成字符串取得后%d位为:%d
",w,getRByString(a,w));
     return 0;
 }
 int getRByString(int a,int w)
 {
     int len,num=0;
     char str[100]={0},*pBen=NULL,*pEnd=NULL;
     sprintf(str,"%d",a);
     len=strlen(str);
     pBen=&str[len-w];
     pEnd=&str[len-1];
     while(pBen<=pEnd)
     {
         num=num*10+*pBen-'0';
         pBen++;
     }
     return num;
 }
 int getRByNum(int a,int w)//方法1:a右边开始取w位数,返回整数
 {
     int len=0,y,n=0,p10=1;
     if(!a)
         return 0;
     do//从个位开始取,累加
     {
 
         y=a%10;
         a=(a-y)/10;
         n=n+y*p10;
         len++;
         p10*=10;
         if(len==w)
             break;
     }while(a/10);
     //printf("a整数长度%d位
",len);
     return n;
 }


1)

int b=a/1000%10000        //十进制中的位

b=a & (15<<3);                //二进制中的位

2)

unsigned short c=(1<<n)-1;      //n位全1

unsigned short b=((a & c)<<(16-n))+((a & ~c)>>n);

#include <stdio.h>
void prt(unsigned short x,char *msg)
{unsigned short i;
 printf("%s的二进制值:
",msg);
 for(i=15;;i--)
   {printf("%d",(x & (1<<i))!=0);
    if(i==0)break;
   }
 printf("
");  
}
int main()
{unsigned short a,b,c,n;
 scanf("%hd",&a);
 prt(a,"a");
 b=a & (15<<3);
 prt(b,"提取右端开始的4~7位"); 
 printf("右移几位:");
 scanf("%hd",&n);
 c=(1<<n)-1; //n位全1
 b=((a & c)<<(16-n))+((a & ~c)>>n);
 prt(b,"循环右移后");
 return 0;
}



海拉尔区19518096949: C语言 从键盘上输入一个正整数,计算并输出该数的各位数字之和 -
阎行升血: 思路:定义变量a接受键盘输入和变量sum保存a的各位数字之和,依次对a进行除10操作,并把a除10的余数加到sum中,直到a为0为止,sum最终的值就是a个位数字之和. 参考代码: #include#include int main() { int a,sum=0; scanf("%d",&a); while(a){ sum+=a%10; a/=10; } printf("%d\n",sum); return 0; } /* 输出: 12345 15 */

海拉尔区19518096949: C语言程序设计:编写程序将输入的一个正整数以相反的顺序输出.例如输入1234,输出4321 -
阎行升血: #include void main() { int a,b,c,d,e,f,g,h,sum; scanf("%d",&a); if(a>=1000&&a { b=a/1000; c=a%10; d=a/1000; e=a/100; f=e%10; g=a/10; h=g%10; sum=c*1000+f*10+h*100+d; printf("转换后:%d",sum); } else printf("此数不为4位数"); }

海拉尔区19518096949: 简单的c语言题目:输入一个正整数,判断是奇数或偶数、负数或非负数. -
阎行升血: #include<stdio.h>int main(void) {int number,a;scanf("%d",&a);if(a%2==0)printf("偶数!");elseprintf("奇数!");if(a==0){printf("\n0既不是整数也不是负数"); goto ab;}if(a<a*10)printf("\n正整数");elseprintf("\n负整数");ab:return 0; }

海拉尔区19518096949: c语言的题.输入一个正整数,输出各个数字的和..请问下面的程序错在哪?该怎么改? -
阎行升血: #include<stdio.h> void print(long s) { if(s==0) return;else{printf("%d",s+n); //print 函数中没有n 这个值print(s=s+n%10); return;} } void main() {int s=0;long n;printf("input");scanf("%d",&n);print(s); }我给你改了一下算法 #include<...

海拉尔区19518096949: C语言题目: 从键盘输入一个正数,计算该数的各位数字之和并输出 -
阎行升血: #include <stdio.h> main() {int n,sum=0; scanf("%d",&n); do { sum=sum+n%10; n=n/10; }while(n); printf("%d\n",sum); }

海拉尔区19518096949: c语言习题,输入一个正整数,按照从高位到低位的顺序输出各位数字.怎么做 -
阎行升血: #include "stdio.h" int main() { int digit,number,power,t;scanf("%d",&number);number=number<0?-number:number;power=1;t=number/10;while(t!=0){ power*=10;t/=10; }printf("the digits are:"); while(power!=0) { digit=number/power;printf("%d ",digit);number=number%power;power/=10;}}

海拉尔区19518096949: C语言……从键盘输入一个整数,把这个数的第n位(从零开始)到m位翻转,求解……在线等 -
阎行升血: 定义2个数组, 一个数组存放当前的数字,另外一个数组存放翻转后的数字

海拉尔区19518096949: C语言编程:从键盘输入一个正整数,逆序输出这个数,并统计出偶数的个数. -
阎行升血: #include <stdio.h>int main() { int a,v,n=0; printf("input int value a\n"); scanf("%d",&a); while(1){ v=a%10; printf("%d",v); if (v%2==0)n++; a=a/10; if (a==0)break; } printf("\neven digi number = %d\n",n); return 0; } 如果数很大,例如有200...

海拉尔区19518096949: 一道c语言数组编程题 编写程序求一个整数各位数字之和. 要求: 1) 输入一个整数. 2) 把这个整数各位数字 -
阎行升血: 这道题的关键在于分离数字,分离方法可以用这种方法,比如,用119来实现分离,根据题目要求结果为1+1+9=11对吧,我们通过这样来分离,(1)用119%10,就是119除以10的余数是9对吧?聪明的你现在就应该发现9被分离出来了吧(2)...

海拉尔区19518096949: 设计C语言程序,输入一个整数,然后依次输出这个数的个个位上的值, -
阎行升血: while(a) //输入的整数a {b[i] = a % 10; //从个位开始将每一位存入数组b中 a = a / 10; i++;}

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网