【C语言】关于左移右移操作

37 阅读1分钟
int main()
{
	unsigned char a = 0b10110000;
	unsigned char b = 7 << 3*2;
	a = a << 3;
	b |= b >> 7;
	return 0;
}

image.png

1)(2)定义一个字节的无符号变量ab,测试左移和右移操作。使用的工具是visual studio 2019,设置断点,调试并添加a,b变量到监视窗口。
初始化后(以下均二进制显示)
    a=10110000;
    b=7 << 3*2;
解释b: 7 对应的二进制 0000 0111 左移 6 后是 1100 0000

image.png

在监视窗口看到的是a,b初始化的十六进制值。
(3)(4)左移和右移的操作
a=1011 0000 左移三位,右边补0, a=1000 0000
b=1100 0000 右移7位 从左边补0, b= 0000 0001 
b|=b 或操作,等号右边的临时结果b的值为b=0000 0001 是新的b值,等号左边的b为之前没更新的值b=1100 0000两者进行或操作得到的值,再赋值给b,最终为b=1100 0001

image.png