【C语言/C++】算术移位和逻辑移位以及一道移位的题目
2016-11-22 15:44
309 查看
算术移位和逻辑移位
基本概念
逻辑移位:移位所缺少的数字用“0”来填充算术移位:移位所缺少的数字用符号位来填充
C/C++中的移位
在C/C++中,整数分为有符号整数和无符号整数两种- 1 - 对于无符号数,采用逻辑移位,不论左移右移都用“0”填充;
- 2 - 对于有符号数,分左移和右移两种情况
- 2a - 若为左移,则属于逻辑运算,补“0”
- 2b - 若为右移,则属于算术运算,补“符号位”
看一道有关位移的面试题
int main() { int a = 1; int b = 32; printf("%d %d\n", a << b, 1 << 32); return 0; }
大家先猜想一下,然后再看下面的结果
运行结果
通过结果,我们发现常量和变量的移位是有区别的
我们需要知道
对于常量,由于左移的位数大于了31位,所以结果为0
而对于变量,如果移位的位数 b 大于了该类型的大小 sz ,则先用b对sz取模,即 b = b % sz,然后再进行移位运算
验证变量移位
我们定一个变量为-1,然后通过循环,使其分别左移1~33位int main() { int a = -1; int b = 0; for (int i = b; i <= 33; ++i) printf("%d左移%.2d位 : 左移结果-> %11d\n", a , i, a << i); return 0; }
运行结果
常量移位这里就不验证了,只要移位超过31,就是0
相关文章推荐
- 【C语言/C++】算术移位和逻辑移位以及一道移位的题目
- C语言 算术移位和逻辑移位
- C/C++ 算术移位&&逻辑移位 int && long long间的转化
- C语言中的运算符>>和<<是算术移位而非逻辑移位
- C语言之逻辑移位与算术移位
- 一道关于C++ 的面试题目(继承、构造函数以及析构函数)
- 一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目) [c#]
- 算术移位与逻辑移位有什么区别?
- 算术移位与逻辑移位有什么区别? 其他开发语言 / 汇编语言 - CSDN社区 community.csdn.net
- 算术移位与逻辑移位有什么区别?
- 逻辑移位与算术移位
- 一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目) [c#]
- 一道C语言访存题目的引申(From林健的BLOG)
- 探寻算术右移与逻辑右移C语言
- 逻辑移位 算术移位
- 这是一道题目……C++的~初步弄出来
- JScript 具有全范围的运算符,包括算术、逻辑、位、赋值以及其他某些运算符
- C++解的一道Google Top Coder 850分的题目
- 有关逻辑判断 请问pascal一道NOIP题目
- 一道C++小题目。