C语言 帮忙解释一下这里为什么c等于260,我输入的是13

#include <stdio.h>
void 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); /*输出八进制数*/
}

#include <stdio.h>

void main()
{
  unsigned short a,b,c; /*声明字符型变量为无符号短整型*/
  int n;

    printf("输入八进制数和要改变的位数:\n");
  scanf("%o%d",&a,&n); /*输入八进制和十进制数*//*这里的括号%o 与%d之间没有逗号的*/  b=a<<(16-n); /*左移运算*/

  c=a>>n; /*右移运算*/
  c=c|b; /*按位或*/
  printf("%o\n%o\n",a,c); /*输出八进制数*/
}

结果如下:

追问

有逗号和没逗号的区别是啥?

你给我的代码我能理解,我自己的那个就不理解

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-07
1、只输入13,而不是用逗号隔开的两个整数显然代码是无法正常工作的。
2、为什么把unsigned short a,b,c; 注释为“/*声明字符型变量为无符号短整型*/”
3、你的代码的用途是什么?追问

2,咱是个新手本来是解释/声明字符型变量/然后我看看那个unsigned short好像是无符号短整形所以就自己加了,其实我也不太懂3、这个代码是书上的

将无符号数a右循环移n位,即将a中原来左面(16-n)位右移位,原来右端n位移到最左面n位

追答

以13,4响应代码时,a = (13)8,n = 4
a = (13)8 = (0,000,000,000,001,011)2
b = a > 4 = (0,000,000,000,000,000,000)2
c = c | b = (1,011,000,000,000,000)2
以8进制格式输出a,c为
13
130000

追问

我貌似知道我错哪了……我只输入了一个数就直接按回车了然后就……

自学有点蛋疼

本回答被提问者采纳
第2个回答  2015-06-07
你输入13那么,a=13,那n等于多少?n是随机数,应该输入13,13那么a和n都为13追问

算出b=1011000那c=a》n不是等于0吗?那按位或不就是1011000吗?

相似回答