Using tilde to mean "approximately" is way more common than using it to mean "bitwise-negation in two's complement", not in the least because the latter meaning is specific to programming and even more specific to certain programming languages.
C does not permit the application of "~" to floating-point numbers. JS does, but it converts them to integers first, and interprets it as bit inversion in two's-complement.
Unix was written on the PDP-7 in 1969, rewritten for the PDP-11 in I think 1972, and ported to the Interdata 7/32 at Wollongong and the Interdata 8/32 in New Jersey in 1977, the IBM 370 in 1977, the VAX in 1979 (32V), and the 68000 in 1982 (4.2BSD). Around that time Unix derivatives like XENIX (1984) started to spread the Gospel to the microcomputer world: the Z8000 and the 8086. Every single one of these processors was two's-complement. (I checked.)
It seems unlikely to me that a C compiler written with the objective of running the existing body of Unix software, which is what was written in C at the time, would be able to get away with "we don't care, just invert the bits", because in practice most of the software you wanted to run would be written with the assumption that it was running on a two's-complement machine. There were some early "C" compilers that weren't compatible enough to compile Unix software — for example, BDS C (not BSD), now public domain, and the Tandem C compiler, for example, although those both ran on machines that happened to be two's-complement.
But was there ever a C compiler that was sufficiently compatible to compile existing C software, but that implemented "~" as you suggest? Maybe, but I would be surprised.
If you think about it, all of the bitwise operators had better be defined just in terms of the bits. Bitwise and, for example, had better be defined as the AND of the bits. No exceptions for the sign bits (or for anything else).
https://www.geeksforgeeks.org/bitwise-operators-in-c-cpp/
https://www.tutorialspoint.com/cprogramming/c_operators.htm
All say the same thing.
(But, BTW, I am home.)
It seems that you have no experience of or reliable knowledge about programming in C on one's-complement or sign-magnitude machines, and furthermore you seem to be unclear on the difference between C and C++. So probably you shouldn't be so confident in your opinions!
Or is your claim that the website, despite being based on the C++ standard, is simplifying it by assuming that all machines are two's-complement? All right then, what is the actual text of the C++ standard? (You're the one making the claim that on ones-complement machines, the standard doesn't require what everyone thinks it does, so you get the burden of proof. Also, I don't have access to the text of the standard.)
So far as I know, the C standard does not differ from the C++ standard on what that operator does. If you claim it does, I'll ask you to document it.
Instead of throwing insults at others' level of knowledge, I suspect you should be a bit more cautious about your own.
But wait, there's something better:
"BETTER THAN TAPES A virtual tape system is a storage system that uses fast disks to emulate physical tape drives. Virtual tape systems look just like tape drives to the OS."
Thanks for pointing it out.
The whole graphic is just a train-wreck of carelessness and unconcern for accuracy. It reframes the entire post as an exercise in marketing (to people without critical thinking skills) rather than a source of reliable technical information.
It's not pedantry to point out that tape drives do not have hundred-millisecond access latency. That's low by two or three orders of magnitude; hardly a pedantic distinction — it's as large as the difference between SSDs and spinning rust. By contrast, it would be pedantic to complain, for example, that many spinning-rust disks now have access latencies closer to 8ms than to 10ms.