BUG: ~DataFrame[object](bool_objects) gives negative integers
### 

- [X] I have checked that this issue has not already been reported.

- [X] I have confirmed this bug exists on the [latest version](https://pandas.pydata.org/docs/whatsnew/index.html) of pandas.

- [X] I have confirmed this bug exists on the master branch of pandas.


### Reproducible Example

```python
ser = pd.Series([True, False], dtype=object)

>>> ~ser
0    -2
1    -1
dtype: object
```


### Issue Description

This causes trouble e.g. when such a series/frame is passed as `cond` to NDFrame.mask, which in turn passes `~cond` to `self.where`, which in turn does type inference and then raises with complaint about needing bool dtype instead of int64.

### Expected Behavior

I expected it to match the pointwise `~`

```
ser = pd.Series([True, False], dtype=object)

>>> ~ser
0    False
1    True
dtype: object
```

### Installed Versions

<details>

Replace this line with the output of pd.show_versions()

</details>
