刁旭东 2023-07-10 13:15 采纳率: 77.8%
浏览 41
已结题

c语言 位操作 右移,我记得是补0啊

c语言 >> 问题
我以为的>>3后 左侧会补0,但是我的程序为什么会补1啊

//将char转成10100010这样的字符串  只取bit位从左侧数前n位   
char* print_b(unsigned char c, int n)
{
    int i = 0;

    char* res;
    res = (char*)malloc(n + 1);
    memset(res, '\0', n + 1);
    unsigned char tmp = 0;
    for (i = 0; i < n; i++)
    {
        //c=00001001 
        //就是为了要把某一位给摘出来
        tmp = c >> (7 - i);//c=00000001
        tmp = tmp << 7;//c=10000000
        if (tmp > 0)
            res[i] = '1';
        //strcat(res, "1");
        else
            res[i] = '0';
        //strcat(res, "0");
    }


    return res;
}

int main()
{
    char p = 0b10100011;
    printf("%s\n", print_b(p,8));
    printf("%s\n", print_b( p>>3,8));
    
    return 9;
}

程序打印结果为
10100011
11110100

环境centos 64位
gcc环境
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)

  • 写回答

2条回答 默认 最新

  • Loup&卡普 2023-07-10 14:55
    关注

    左移补 0 ,
    右移补最高位,负数补1

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月18日
  • 已采纳回答 7月10日
  • 创建了问题 7月10日

悬赏问题

  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥15 pyqt信号槽连接写法
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急