右移和左移是不同的
对于左移来说,是没有“逻辑左移”和“算术左移”的区别的,这里的区别主要在于计算机系统根据最高位(也就是符号位)是“1”还是“0”,补充“1”还是“0”
无论是对于无符号数的最高位为“1”,还是为“0”,左移时最低位一律补全“0”
或者是对于有符号数的符号是正“0”,还是负“1”,左移最低位也一律补全“0”
不同之处在于
只有在右移的时候,才有“逻辑”和“算术”的区别
如何测试一个计算机系统是“逻辑右移”还是“算术右移”?
答案是:必须用最高位为“1”的数测试
如果最高位为“1”的数(这里用全“1”序列~0来表示)右移 :
a=(~0>>4);
if(a==~0)printf("计算机系统为算术右移");
else printf("计算机系统为逻辑右移");