如何通过移位操作实现两数之商的求法?
摘要:五一漫长的假期,外面的世界是人山人海,反而在家刷题算得上一个好的休闲方式。刚好我开始写这道题: Given two integers `dividend` and&#160
五一漫长的假期,外面的世界是人山人海,反而在家刷题算得上一个好的休闲方式。刚好我开始写这道题:
Given two integers`dividend`and`divisor`, divide two integers**without**using multiplication, division, and mod operator.
The integer division should truncate toward zero, which means losing its fractional part. For example,`8.345`would be truncated to`8`, and`-2.7335`would be truncated to`-2`.
Return*the**quotient**after dividing* `dividend` *by* `divisor`.
**Note:** Assume we are dealing with an environment that could only store integers within the**32-bit**signed integer range:`[−231, 231 − 1]`. For this problem, if the quotient is**strictly greater than**`231 - 1`, then return`231 - 1`, and if the quotient is**strictly less than**`-231`, then return`-231`.
**Example 1:**
Input: dividend = 10, divisor = 3
Output: 3
Explanation: 10/3 = 3.33333.. which is truncated to 3.
**Example 2:**
Input: dividend = 7, divisor = -3
Output: -2
Explanation: 7/-3 = -2.33333.. which is truncated to -2.
**Constraints:**
- `-231 <= dividend, divisor <= 231 - 1`
- `divisor != 0`
看懂题目上说的,就是不能用乘法、除法以及取余操作来算出两个给定整数的商。这个时候我想到利用移位操作来实现。
虽然工作多年,但是真正在实际项目中用到移位操作的时候是很少的。
逻辑移位:
- 逻辑移位将位向左或向右移动,并在空位填充零。
- 在左逻辑移位(<<)中,位向左移动,从右侧填充零。
- 在右逻辑移位(>>)中,位向右移动,从左侧填充零。
简单来说,如果1<<2, 就是1乘以2的2次方,以此类推。
