I always use the type aliases in the standard library, such as: http://en.cppreference.com/w/cpp/header/cstdint
For containers I use container::size_type or std::size_t for plain arrays, and it's important not to forget ptrdiff_t for pointer differences and offsets since the size of pointers is almost always different and thus the size of the difference is too.
With all of the above said, I never directly use the raw primitive types because you cannot easily write portable code with them. I only use them if the interface I must work with uses them.
why is bool type consuming 1 byte to store while it can be stored in a bit?
Because the smallest unit a computer is able to process is a whole byte. You have to do math to manipulate bits. Do note, however, that std::vector has a specialization for bool to optimize memory used so that each element actually does take up one bit (it does the math for you).