0%

一道计组考研题的思考

😑正确答案是:C

考点:移位

有符号数:

有符号正数:

原码/反码/补码:无论左移右移,符号位不变,移出位丢弃,空位补0

有符号负数:

·原码:无论左移右移,符号位不变,移出位丢弃,空位补0

·反码:无论左移右移,符号位不变,移出位丢弃,空位补1

·补码:无论左移右移,符号位不变,移出位丢弃,左移空位补0,右移空位补1

无符号数:

左移:<<

右移:>>

移出位一律补0

拓展

C语言中的左移右移与编程实现

众所周知,计算机中的数据都是由补码表示,下面的代码实现了作为补码的左移和右移:

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
int main(){
int n = 0x9A ;
int t = (n<<1)&0xff;
//n左移1位,末位补0,&0xff使输出是8位
int m = (n>>1);
//n右移1位,最高位补0,舍弃最右侧的1位
printf("%#X\n",t);
printf("%#X\n",m);
//"%#X"是输出16进制的一种形式,最推荐使用的就是这种格式
return 0 ;
}

运行结果:

-------------本文结束感谢您的阅读-------------
请作者喝一杯蜜雪冰城吧!