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

#include"stdio.h"voidmain(){charch;ch='e';ch<<4;printf("%c\n",ch);}运行结果是e#include"std... #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个运行结果也是完全不懂,麻烦高手详细解释一下啊
展开
 我来答
删体一n
推荐于2017-11-22 · TA获得超过226个赞
知道答主
回答量:75
采纳率:0%
帮助的人:0
展开全部
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);
}
L_o_o_n_i_e
2009-09-13 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5205万
展开全部
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

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangtk1982
2009-09-13 · TA获得超过3742个赞
知道大有可为答主
回答量:3206
采纳率:100%
帮助的人:1447万
展开全部
#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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
朴丹樊鸟
2019-10-31 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.4万
采纳率:31%
帮助的人:691万
展开全部
a没有变啊,b
=
a
<<
3的意思是把a左移后的结果赋值给b
就像
b
=
a+3;
b的值是a+3但是a本身没有加3的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
令琬宝和裕
2019-09-13 · TA获得超过3652个赞
知道大有可为答主
回答量:3109
采纳率:34%
帮助的人:228万
展开全部
为什么计算出来的数据了
二进制
1111
1110
1111
1101
1111
1011
估计楼主你的这些数据应该是p1的,而temp的值是
二进制
0000
0001
0000
0010
0000
0100
注:
~temp只是求反并不改变temp本身的值,
对temp向高位移,低位是补0的而不会把前面的1换到后面来,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式