关于数制转换的几个why,懂的大神看这里!!!小弟先谢过
q1:编写c程序,将无符号数a左循环n位,即将a中原来左面的n位左移n位,位移到右面n位。//首先题目什么意思啊? #include <stdio.h>
int main()
{
unsigned short a,b,c;
int n;
scanf("%o,%d",&a,&n);
b=a>>(16-n); //这句以及下面两句程序怎么实现功能的?//
c=a<<n;
c=c|b;
printf("%o\n%o\n",a,c);
return 0;
}
q2:编写c程序,将16进制数转换为二进制数
#include<stdio.h>
int main()
{
unsigned short a,b,i; /*声明无符号短整型*/
printf("请输入一个整型数:");
scanf("%x",&a); /*输入无符号整型*/
b=1<<15; /*构造一个最高位为 1、其余各位为0的整数*/
printf("%x=",a);
for(i=1;i<=16;i++)
{
putchar(a&b?'1':'0'); /*关键是这句,不懂啊,这个三目运算符还可以这么用?*/
a<<=1; /*将次高位移到最高位上*/
if(i%4==0)
putchar(','); /*四位一组用逗号分开*/
}
printf("\bB\n");
return 0;
}
q3:设char型变量x中的值1010 0111,则表达式(2+x)^(~3)的值是()
按照我的算法,是先把char型数值转换为十进制,然后加2,将结果转换为二进制,同时3转换为二进制,然后取反,将两二进制数进行异或,然后将结果抓换位二进制,可是坑爹啊,结果与答案不一样。特此求教。
ps:问题有点多,希望各位大大见谅。