当前位置:网站首页>移位运算符

移位运算符

2022-07-06 08:22:00 踏破铁鞋无觅处,bug一写一上午

一、左移:<<
将数字的补码相左移动,用0填充

#include <stdio.h>
int main()
{
    
    char a = 65;
    char c = a<<1;
    printf("%d", c);
    return 0;
}

结果为:-126

正数:65
正数原反补码相同:01000001
左移后结果:10000010	//这个是移动后的原码,需要转为补码
反码:11111101
补码:11111110
结果:-126


负数:-65
原码:11000001
反码:10111110
补码:10111111
向左移动:01111110		//该原码是一个正数,原反补相同
结果:126

二、右移:>>
将数字的补码向右移动,对于无符号数来说,用0填充,对于有符号数来说,用符号位填充。

#include <stdio.h>
int main()
{
    
    char a = -7;
    char c = a>>2;
    printf("%d", c);
    return 0;
}

结果位-2

负数:-7
原码:10000111
反码:11111000
补码:11111001
右移后结果:11111110		//这个是移动后的原码,需要转为补码
反码:10000001
补码:10000010
结果:-2

正数:7
正数原反补码相同:00000111
右移后结果:00000001		//这个是移动后的原码,是一个正数,原反补相同
结果:1
原网站

版权声明
本文为[踏破铁鞋无觅处,bug一写一上午]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_45939085/article/details/125052071