Bit Manipulator/Reader
JavaScript (ES6), 75 bytes

Saved 4 bytes thanks to @Mwr247

Manipulator: (47 bytes)

(a,b,c=1,d=0,z=(1&lt;&lt;c)-1&lt;&lt;b)=&gt;d?d&lt;0?a&amp;~z:a|z:a^z


Reader: (28 bytes)

(a,b,c=1)=&gt;a&gt;&gt;b&amp;(1&lt;&lt;c-1)*2-1


How it works

Manipulator

The first thing we need to do is figure out the number that has c bits set, starting at the bth bit. Possibly the best way to do this is z=(1&lt;&lt;c)-1&lt;&lt;b, which works like so:

b  c    1&lt;&lt;c     -1     &lt;&lt;b    z
2  1      10     01    0100    4
2  2     100    011   01100   12
2  3    1000   0111  011100   28
1  4   10000  01111  011110   30


Now we take into account d. For case 0, we flip the bits with a^z; for case 1, we set the bits to 1 with a|z; for case -1, we set the bits to 0 with a&amp;~z.