C语言实验题,这是输入十六进制数字反序输出的程序,每一步求解释,看不懂程序.
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实验题,这是输入十六进制数字反序输出的程序,每一步求解释,看不懂程序.相关的知识,希望对你有一定的参考价值。
scanf("%hx",&a);——a=HHHHhhhhLLLLllllb=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语言实验题,这是输入十六进制数字反序输出的程序,每一步求解释,看不懂程序.的主要内容,如果未能解决你的问题,请参考以下文章