位运算符
按位与 &
按位或 |
按位异或 ^
按位取反 ~
按位左移 <<
按位右移 >>
实际上,一般情况下,位运算符是很少使用的。有一种看法认为,位的操作是比较底层的,因此,在高级的语言中,都不应该出现或使用位操作。而c++中之所以有这些位运算符,首先是因为c++不是那么的高级,再其次一个重要的原因就是要和c兼容。当然即使不与c兼容,就按照c++一贯的作风,也大概会把这些都留下,我们不要好的,只要多的。
补充说明:按位和逐位是一个意思。另外按位取反和按位非是一个意思。
位操作符说明
1,按位与&
操作两个操作数的每个位,如果都有1,则对应的结果位为1,否则为0。
2,按位或|
操作两个操作数的每个位,如果有至少一个为1,则对应的结果位为1,否则为0。
3,按位异或^
操作两个操作数的每个位,如果只有一个为1,则对应的结果位为1,否则为0。
4,按位取反~
操作一个操作数的每个位,把1设置为0,把0设置为1。
5,位左移<<
所有位向左移动,移动到外边的位丢弃,从右开始补0。
6,位右移>>
所有位向右移动,无符号数补0,有符号数补符号位
特别注意:
1,按位与和按位或不是逻辑与和逻辑或,也就是&和&&,|和||是完全不同的。
2,位左移和位右移不应该被拿来用作计算乘法和除法。
按位与/或和逻辑与/或的区别
1,逻辑与和逻辑或得到的结果是布尔值,而按位与和按位或并不是用来获得布尔值的。
2,逻辑与和逻辑或有短路特性,而按位与和按位或没有短路特性。
3,虽然在操作0和1的时候,按位与和按位或得到的结果同逻辑与和逻辑或是相似的,但是不应该使用按位与/或来代替逻辑与/或使用,也就是一定要分清楚&&和&以及||和|之间的区别。
补充知识-信息存储
计算机中的信息是使用二进制的形式来存储的
位(bit):这是最小的单位,1位也就是1位二进制数
字节(Byte):一个字节由8个二进制数组成,也即是1Byte = 8bit,我们经常通过字节来表示容量。
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
也就是我们常说的1KB,实际上就是千字节。字节和位经常容易弄混,因此应该特别注意。
点击查看全部c++教程