问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言中位运算符问题 这句话怎么解释啊

发布网友 发布时间:2022-04-24 02:36

我来回答

2个回答

热心网友 时间:2023-10-22 09:03

这句话的理解有这样一个基础,那就是右移n位相当于除以2的n次方,而这个基础就是对于无符号数来说的。
比如无符号数8,如果用8位二进制表示,就是二进制的0000 1000,
右移0位,也就是不移动,等于8,就等于8除以1,也就是8除以2的0次方;
右移1位,0000 0100 ,等于4,就等于8除以2,也就是8除以2的1次方;
右移2位,0000 0010 ,等于2,就等于8除以4,也就是8除以2的2次方;
右移3位,0000 0001 ,等于1,就等于8除以8,也就是8除以2的3次方;
对于有符号数,最高位为符号位,>> 右移运算,移动的时候符号位会被同时移动。

比如有符号数的-8,如果用8位二进制补码表示,就是二进制的 1111 1000,
右移0位,也就是不移动,等于-8,就等于8除以1,也就是8除以2的0次方;
右移1位:
如果补1进来, 1111 1100 ,等于-4, 就等于8除以2,也就是8除以2的1次方;
如果补0进来, 0111 1100 ,等于124,就不等于8除以2了;

右移2位,0000 0010 ,等于2,就等于8除以4,也就是8除以2的2次方;
如果补1进来, 1111 1110 ,等于-2, 就等于8除以4,也就是8除以2的2次方;
如果补0进来, 0011 1110 ,等于62,就不等于8除以4了;

右移3位,0000 0001 ,等于1,就等于8除以8,也就是8除以2的3次方;
如果补1进来, 1111 1111 ,等于-1, 就等于8除以8,也就是8除以2的3次方;
如果补0进来, 0001 1111 ,等于31,就不等于8除以8了;

根据以上分析,对于带符号数负数,发现右移时有两种情况:补1(也就是符号位)进来,还能够保持除以2的n次方的关系成立;补0进来就不行。
不同的C编译系统根据自己的特点在这个问题上可能就采取了不同的办法。比如VC和DEV C++,对于带符号数的右移运算就采取了补符号位的方式。

热心网友 时间:2023-10-22 09:03

这句话的理解有这样一个基础,那就是右移n位相当于除以2的n次方,而这个基础就是对于无符号数来说的。
比如无符号数8,如果用8位二进制表示,就是二进制的0000 1000,
右移0位,也就是不移动,等于8,就等于8除以1,也就是8除以2的0次方;
右移1位,0000 0100 ,等于4,就等于8除以2,也就是8除以2的1次方;
右移2位,0000 0010 ,等于2,就等于8除以4,也就是8除以2的2次方;
右移3位,0000 0001 ,等于1,就等于8除以8,也就是8除以2的3次方;
对于有符号数,最高位为符号位,>> 右移运算,移动的时候符号位会被同时移动。

比如有符号数的-8,如果用8位二进制补码表示,就是二进制的 1111 1000,
右移0位,也就是不移动,等于-8,就等于8除以1,也就是8除以2的0次方;
右移1位:
如果补1进来, 1111 1100 ,等于-4, 就等于8除以2,也就是8除以2的1次方;
如果补0进来, 0111 1100 ,等于124,就不等于8除以2了;

右移2位,0000 0010 ,等于2,就等于8除以4,也就是8除以2的2次方;
如果补1进来, 1111 1110 ,等于-2, 就等于8除以4,也就是8除以2的2次方;
如果补0进来, 0011 1110 ,等于62,就不等于8除以4了;

右移3位,0000 0001 ,等于1,就等于8除以8,也就是8除以2的3次方;
如果补1进来, 1111 1111 ,等于-1, 就等于8除以8,也就是8除以2的3次方;
如果补0进来, 0001 1111 ,等于31,就不等于8除以8了;

根据以上分析,对于带符号数负数,发现右移时有两种情况:补1(也就是符号位)进来,还能够保持除以2的n次方的关系成立;补0进来就不行。
不同的C编译系统根据自己的特点在这个问题上可能就采取了不同的办法。比如VC和DEV C++,对于带符号数的右移运算就采取了补符号位的方式。

热心网友 时间:2023-10-22 09:04

当x为负数时,由于符号位为1,右移时,DEV C++系统是规定最高位补1。
例如,-8=11111000B
-8>>2=11111110B
即-8>>2=-2,满足了与正数同样的运算结果,即x>>2的值,等于x/(2^2)。
+8>>2=+2
00001000 >>2 ==> 00000010

热心网友 时间:2023-10-22 09:03

这句话的理解有这样一个基础,那就是右移n位相当于除以2的n次方,而这个基础就是对于无符号数来说的。
比如无符号数8,如果用8位二进制表示,就是二进制的0000 1000,
右移0位,也就是不移动,等于8,就等于8除以1,也就是8除以2的0次方;
右移1位,0000 0100 ,等于4,就等于8除以2,也就是8除以2的1次方;
右移2位,0000 0010 ,等于2,就等于8除以4,也就是8除以2的2次方;
右移3位,0000 0001 ,等于1,就等于8除以8,也就是8除以2的3次方;
对于有符号数,最高位为符号位,>> 右移运算,移动的时候符号位会被同时移动。

比如有符号数的-8,如果用8位二进制补码表示,就是二进制的 1111 1000,
右移0位,也就是不移动,等于-8,就等于8除以1,也就是8除以2的0次方;
右移1位:
如果补1进来, 1111 1100 ,等于-4, 就等于8除以2,也就是8除以2的1次方;
如果补0进来, 0111 1100 ,等于124,就不等于8除以2了;

右移2位,0000 0010 ,等于2,就等于8除以4,也就是8除以2的2次方;
如果补1进来, 1111 1110 ,等于-2, 就等于8除以4,也就是8除以2的2次方;
如果补0进来, 0011 1110 ,等于62,就不等于8除以4了;

右移3位,0000 0001 ,等于1,就等于8除以8,也就是8除以2的3次方;
如果补1进来, 1111 1111 ,等于-1, 就等于8除以8,也就是8除以2的3次方;
如果补0进来, 0001 1111 ,等于31,就不等于8除以8了;

根据以上分析,对于带符号数负数,发现右移时有两种情况:补1(也就是符号位)进来,还能够保持除以2的n次方的关系成立;补0进来就不行。
不同的C编译系统根据自己的特点在这个问题上可能就采取了不同的办法。比如VC和DEV C++,对于带符号数的右移运算就采取了补符号位的方式。

热心网友 时间:2023-10-22 09:04

当x为负数时,由于符号位为1,右移时,DEV C++系统是规定最高位补1。
例如,-8=11111000B
-8>>2=11111110B
即-8>>2=-2,满足了与正数同样的运算结果,即x>>2的值,等于x/(2^2)。
+8>>2=+2
00001000 >>2 ==> 00000010

热心网友 时间:2023-10-22 09:04

当x为负数时,由于符号位为1,右移时,DEV C++系统是规定最高位补1。
例如,-8=11111000B
-8>>2=11111110B
即-8>>2=-2,满足了与正数同样的运算结果,即x>>2的值,等于x/(2^2)。
+8>>2=+2
00001000 >>2 ==> 00000010

热心网友 时间:2023-10-22 09:03

这句话的理解有这样一个基础,那就是右移n位相当于除以2的n次方,而这个基础就是对于无符号数来说的。
比如无符号数8,如果用8位二进制表示,就是二进制的0000 1000,
右移0位,也就是不移动,等于8,就等于8除以1,也就是8除以2的0次方;
右移1位,0000 0100 ,等于4,就等于8除以2,也就是8除以2的1次方;
右移2位,0000 0010 ,等于2,就等于8除以4,也就是8除以2的2次方;
右移3位,0000 0001 ,等于1,就等于8除以8,也就是8除以2的3次方;
对于有符号数,最高位为符号位,>> 右移运算,移动的时候符号位会被同时移动。

比如有符号数的-8,如果用8位二进制补码表示,就是二进制的 1111 1000,
右移0位,也就是不移动,等于-8,就等于8除以1,也就是8除以2的0次方;
右移1位:
如果补1进来, 1111 1100 ,等于-4, 就等于8除以2,也就是8除以2的1次方;
如果补0进来, 0111 1100 ,等于124,就不等于8除以2了;

右移2位,0000 0010 ,等于2,就等于8除以4,也就是8除以2的2次方;
如果补1进来, 1111 1110 ,等于-2, 就等于8除以4,也就是8除以2的2次方;
如果补0进来, 0011 1110 ,等于62,就不等于8除以4了;

右移3位,0000 0001 ,等于1,就等于8除以8,也就是8除以2的3次方;
如果补1进来, 1111 1111 ,等于-1, 就等于8除以8,也就是8除以2的3次方;
如果补0进来, 0001 1111 ,等于31,就不等于8除以8了;

根据以上分析,对于带符号数负数,发现右移时有两种情况:补1(也就是符号位)进来,还能够保持除以2的n次方的关系成立;补0进来就不行。
不同的C编译系统根据自己的特点在这个问题上可能就采取了不同的办法。比如VC和DEV C++,对于带符号数的右移运算就采取了补符号位的方式。

热心网友 时间:2023-10-22 09:04

当x为负数时,由于符号位为1,右移时,DEV C++系统是规定最高位补1。
例如,-8=11111000B
-8>>2=11111110B
即-8>>2=-2,满足了与正数同样的运算结果,即x>>2的值,等于x/(2^2)。
+8>>2=+2
00001000 >>2 ==> 00000010
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 黑龙江债权转让合同纠纷该怎样取证 安徽债权转让合同纠纷应该怎么样取证 房产官司律师费多少 草图大师界面问题 (一0图4?福建)如图示意图月、7月北半球纬向风的平均风向及风速(单位:m/四)随纬度和高度的变化.读图 win10系统 安装完草图大师2018中文版 后 进入软件变成英文 换一个马自达前汽车盖子得多少钱?图月车管家 c语言里当数组个数为偶数时,这个数组的中位数是什么 什么兰花最香,兰花有哪些品种,它们生长地在哪里 要5月4号地震图月 草图大师界面问题,求解 C语言中位操作 成语图片月猜成语答案 草图大师怎么恢复默认界面 c语言中"位"怎么还可以操作运算啊'? 图片月人生字猜成语 草图大师初始的那个人怎么加 草图大师5.0的软件特色 魔兽争霸DOTA那张图月祭祀应该出哪些装备 哪家银行可以做汽车抵押贷款 c语言中位运算的左位移右位移都是什么意思 我打开草图大师的界面为什么跟别人不一样 哪个银行可以做汽车抵押贷款 残棋破解大全图月上柳眉怎么破解 香水兰有毒吗?放在室内养植对人有害么? 每次打开草图大师的界面都会出现这样的界面。不知道是怎么回事,但是不影响使用 C语言中什么叫做高八位和低八位啊? 为什么玛雅人知道月亮背面的图月貌 草图大师界面很花 c语言中一位是不是代表只能输出一个数字? 平年全年有___天,闰年的图月份有___天,2008年是___年 mt4周图月图显示不完整怎么办 草图大师 界面的问题 C语言运算符中的>>是什么意思?有啥功能?谢谢。 我知道为什么玛雅人知道月亮背面的图月貌 ?我的理解是他们看到了近月点的时候的超级大月亮,谢谢! 我的草图大师6界面为什么每次打开都是这样?必须点击确定才可以恢复正常工作。该怎么办? 清宫图月份怎么算? 受蒙古气旋和冷空气影响,二0h0年图月hd日至二0日,我国出现今年以来最强的一次沙尘暴天气.以下关于沙尘 sketchup动画怎么做 日练百字周标一图月写一文是什么 手机不能加载股票日k线图月k线图 什么叫月K线图 只图月 朗风清笑荷花水中末忘形是什么生肖