C语言实验题,这是输入十六进制数字反序输出的程序,每一步求解释,看不懂程序.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实验题,这是输入十六进制数字反序输出的程序,每一步求解释,看不懂程序.相关的知识,希望对你有一定的参考价值。

scanf("%hx",&a);——a=HHHHhhhhLLLLllll
b=a<<12;——b=llll000000000000
c=a<<4&0x0f00;——c=hhhhLLLLllll0000&0000111100000000==0000LLLL00000000
d=a>>12&0x000f——d=000000000000HHHH&0000000000001111==000000000000HHHH
a=a>>4&0x00f0——a=0000HHHHhhhhLLLL&0000000011110000==00000000hhhh0000

a=a+b+c+d=00000000hhhh0000+llll000000000000+0000LLLL00000000+000000000000HHHH=llllLLLLhhhhHHHH
以上H、h、L、l和1都是二进制的一位。由此可知,若输入ABCD的话,输出则是DCBA,刚好把输入的16进制数按位倒过来……
参考技术A 举个例子,比如
a = 0x 5432
那么:
1: b = a << 12 --------> 0x 5432 << 12 = 0x 2000(16进制,一个数代表4位二进制)
2: a << 4 --------> 0x 5432 << 4 = 0x 4320
0x 4320 & 0x 0f00 = 0x 0300
c = 0x 0300
3:a >> 12 ---------> 0x 5432 >> 12 = 0x 0005
0x 0005 & 0x 000f = 0x 0005
d = 0x 0005
4:a >> 4 ----------> 0x 5432 >> 4 = 0x 0543
0x0543 & 0x 00f0 = 0x 0040
a = a + b + c +d = 0x 0040 + 0x 2000 + 0x 0300 + 0x 0005 = 0x 2345
参考技术B 从sacnf那里说,scanf从标准输入读入值赋给a;
后面的主要涉及两个知识点,左移运算/右移运算,逻辑运算与,这两种运算都是在二进制的层次上运算的。
假如我们输入的是十六进制856,它的二进制是100001010110;
b=a << 12;//a左移12位,就在100001010110后面添加12个0;
c = a << 4 & 0x0f00;//分成两步,先是上移4位,就在100001010110后面添加4个0,然后与16进制的0x0f00(二进制0000 1111 0000 0000)进行与运算,其实和0x0f00与运算的那个数只保留那四个1的位置的数,其他全部抹成0;
右移的话就是直接抹掉,不是换成0,而是直接抹掉。比如1111 0101 0010 >>4 就是1111 0101

剩下的你自己算吧
参考技术C 请把源码发上来,这样才能方便大家解决你的问题。 参考技术D 位操作(可自行百度该词条),看了你就明白了。

编程题:输入任意一个4位数整数,将该数反序输出。求解

c语言

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) 

 int a,s,d,f,g,h,j,k,l;
 printf("请输入四位整数");
 scanf("%d",&a);
 s=a/1000;
 d=a%1000;
 f=d/100;
 g=d%100;
 h=g/10;
 j=g%10;
 k=j/1;
 printf("颠倒后的数字为%d%d%d%d",k,h,f,s);
 return 0;


参考技术A

c:

#include <stdio.h>
#include <stdlib.h>
int main()
    int n;
    printf("输入一个数:");
    scnaf("%d",&n);
    printf("反序输出:\\n");
    while(n!=0)
        printf("%d",n%10);
        n/=10;
    
    return 0;

追问

谢谢你,不过你好像理解错了我的意思

参考技术B

参考技术C 1234 4位 = 1*1000+2*100+3*10+4*1
方向
4*1000+3*100+2*10+1*1
看出规律来了没?
如果从1234中单独取1, 2 ,3, 4 我就不用说了吧?

这只是一种解法
还可以用字符串去解决
有不懂的在问追问

哦哦,懂了,谢谢

本回答被提问者采纳
参考技术D 什么语言写呢?追问

c语言

以上是关于C语言实验题,这是输入十六进制数字反序输出的程序,每一步求解释,看不懂程序.的主要内容,如果未能解决你的问题,请参考以下文章

C语言怎么反序输出

编程题:输入任意一个4位数整数,将该数反序输出。求解

c语言编程题,数制转换

用c++编写程序:输入一个自然数,将该数的每一位数字按反序输出。

输入一个正整数N,输出它的英文表达。[C语言]

C语言、输入四位数、倒序输出。