"16 bit" refers to the length (in bits - zeros and ones) of the addresses of memory locations, and the length of instructions issued to the processors.
All versions of MS-DOS and the below versions of Windows had 16 bit code:
- MS-DOS (all versions)
- Windows 1.x/2.x/3.x (all versions)
- Windows 4.x or 9x (Windows 95/98/Millennium Edition) (all versions)
MS-DOS and Windows up to Windows 3.0 were completely 16-bit code. With the advent of the Intel 80386 processor, Windows 3.11 introduced the possibility of the possibility of using 32-bit processing, which made certain features of the operating system perform faster and more efficiently. However, this only applied to certain programs, as most of the underlying code still was tied to DOS, which was completely 16 bit.
The Windows 95/98/ME line was a hybrid of 16 and 32 bit code. Windows ran mostly in 32 bit code, but still retained backwards compatibility for DOS and Windows programs written in 16 bit code, due to DOS being the foundation of the code base.
This reliance on DOS became less and less apparent with each successive Windows 9.x version, with Windows ME appearing not to need DOS at all (due to disabling the ability to enter real DOS mode), though it could still run DOS programs and certain hacks could reenable real DOS mode, meaning it still had 16 bit code.
Windows NT was completely 32 bit, which had no 16 bit code, but could emulate certain DOS and older Windows programs via an emulation filter, though the most recent versions of NT (like Vista and Windows 7, especially the 64 bit versions) cannot run any DOS or Windows 3.x programs except via special emulation software like DOSbox or in other virtual machine programs, due to having no 16 bit code or emulation support for it.