【C语言】逻辑位移和算数位移的区别

本文探讨了C语言中逻辑位移和算术位移的区别,对于无符号类型,两者相同;有符号类型下,算术右移会根据符号位填充。在VS2008编译器中,无符号类型移位为逻辑移位,有符号类型右移为算术右移。
摘要由CSDN通过智能技术生成

逻辑位移:

逻辑移位是指逻辑左移和逻辑右移,移出的空位都用0来补。

算数位移:

算术移位 就需要分有符号型值和无符号型值
对于无符号型值,算术移位等同于逻辑移位。
而对于有符号型值 ,算术左移等同于逻辑左移,算术右移补的是符号位,正数补0,负数补1。

C编译器采用的是哪一种?

答:在汇编指令中,shl和shr表示逻辑左移和逻辑右移,sal和sar表示算术左移和算术右移。

首先让我们来看一段代码:

#include <stdio.h>

int main()
{
    int a = 65;  //有符号整型 0100 0001
    unsigned int b = 65; //无符号整型 0100 0001
    a <<= 1; //1000 0010  130
    b >>= 1; //0010 0000  32
    char c = 127; //0111 1111
    c <<= 3; //1111 1000 -8
    char d = 127; //0111 1111
    d >>= 3; //0000 1111 15
    char e = -8; //内存以补码为1111 1000存储  源码为1000 1000 反码为1111 0111
    e >>= 3; //-1  补码1111 1111 源码 1000 0001 反码1111 1110
    printf("%d %d\n",a,b);//130 32
    printf("%d %d\n",c,d);//-8  15
    printf("%d\n
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值