c语言移位详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/izzxacbbt/article/details/82908242

实验平台 vs2017

左移位和右移位有区别.

左移位比较简单,就是直接在低位后面补0;

右移位则比较复杂,

假设有10000000的二进制数,往右移动一位,则数变为11000000,原因在于补的高位是原来的第一位,

也就是说如果是01000000,则往右移动一位,变为00100000.

需要注意的是也有一个特殊的情况,这是最令人困惑的

考虑以下两条语句

char a=0x80   //10000000

char b=a<<1>>1;//将a左移一位,再右移一位,赋值给b;

按道理,先左移一位变为00000000,再右移一位应该是00000000

但实际上,b会是10000000

但是还是下面的三条语句,情况就会有不同,

char a=0x80

char b=a<<1;

b=b>>1;

这个时候b就会是我们预料的00000000.

以上就是所有我们需要注意的事项

猜你喜欢

转载自blog.csdn.net/izzxacbbt/article/details/82908242