Suitable for interval sum or prefix sum.
Interval sum is just difference of two prefix sums.
Compared with Segment Tree, Binary Indexed Tree requires less space and is easier to implement.
BIT needs exactly n extra spaces, but Segment Tree needs approximately 2n extra spaces.
https://www.geeksforgeeks.org/binary-indexed-tree-or-fenwick-tree-2/
2D BIT
https://evanyang.gitbooks.io/leetcode/content/LeetCode/range_sum_query_2d_-_mutable.html
For BIT, the indexes should start at position 1, so that you can use i&(-i) to move.
When you want to get the prefix sum at position i, you should deduct i&(-i) iteratively, and it will move through all the same level nodes horizontally for you to sum.
When you want to update a value at position i, you should add i&(-i) iteratively, and it will move upwards throught all the parent nodes vertically towards the root.