C语言中左移运算符的问题

#include"stdio.h"

void main()
{char ch;
ch='e';
ch<<4;
printf("%c\n",ch);
}
运行结果是e
#include"stdio.h"

void main()
{char ch;
ch='e';
ch=ch<<4;
printf("%c\n",ch);
}
运行结果是P
<<左移运算符可以将ASCII值左移?看书上写的<<是左移‘位’啊。。。上面的2个运行结果也是完全不懂,麻烦高手详细解释一下啊

void main()
{char ch;
ch='e';
ch<<4;//对ch代表的2进制码左移4位但根本没有把新值赋给ch,ch保持原值不变,例如int a = 5; a - 1; a还是5啊,对吧? :),所以结果是e啦
printf("%c\n",ch);
}

void main()
{char ch;
ch='e';
ch=ch<<4;//ch的ascll码是101,转换成2进制是01100101,左移4位是01010000,转换成10进制是80,正好是大写P的ascll值,所以结果是P啦
printf("%c\n",ch);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-13
char ch='e'; 十六进制0x65
'e' 等于 二进制 0110 0101

ch=ch<<4;
左移4位 得 二进制 0101 0000
(高位0110 溢出, 自动丢失)
赋还到ch里.

二进制 0101 0000 是 P, 十六进制 0x50

#include <stdio.h>
void main()
{
char ch='e';
printf("%x %c\n",ch,ch); //0110 0101
ch=ch<<4;
printf("%x %c",ch,ch); // 0101 0000

}
第2个回答  2009-09-13
#include"stdio.h"

void main()
{char ch;
ch='e';
ch<<4;//这样移动没有效果 就像你操作ch+1 虽然做了操作 但对下面没有任何作用
printf("%c\n",ch);
}

#include"stdio.h"

void main()
{char ch;
ch='e';
ch=ch<<4;//e的ascii值是101二进制是01100101 左移4就是01010000也就是80 看ascii就知道是大写字母P
printf("%c\n",ch);
}
第3个回答  2019-10-31
a没有变啊,b
=
a
<<
3的意思是把a左移后的结果赋值给b
就像
b
=
a+3;
b的值是a+3但是a本身没有加3的!
第4个回答  2019-09-13
为什么计算出来的数据了
二进制
1111
1110
1111
1101
1111
1011
估计楼主你的这些数据应该是p1的,而temp的值是
二进制
0000
0001
0000
0010
0000
0100
注:
~temp只是求反并不改变temp本身的值,
对temp向高位移,低位是补0的而不会把前面的1换到后面来,

相关了解……

你可能感兴趣的内容

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