C/C++ 默认数字使用十进制,八进制使用前缀 0, 十六进制使用前缀 0x 或 0X
加法
以010+010
为例:加法两边的数值的右边第一位都是0,相加得0;中间那一位都是1,相加为2,所以需要进位,结果变为0;左边第一位都是0,相加得0,再加上进的为,结果为1。按照加法运算结果应该为1000,因为位数已经固定为3位,所以最左边超出的一位将被舍弃,结果为000
c++中二进制的运算有一个前提条件,必须固定位数再进行运算,如果进位时超出位数,那么超出部分将会舍弃。例如需要相加的二进制数值为3位数,
110+010
,按照加法运算的结果应该为1000,因为位数已经固定为三维,左边超出的一位将被舍弃,所以结果为000
unsigned int是保存非负整数的int类型,它的最大值是4294967295,也就是二进制32位都是1的值,而且unsigned int是用固定的32位二进制来保存数据的,所以当它加上1的时候,就会因为进位而超出一个位,而超出的这个位就会被舍弃,因此输出结果就是0。
减法
从低位开始减,方法同加法
<< 左移运算和 >>右移运算
以二进制0110
举例:0110
左移一位就是在右边添加1位0,得出01100
,由于固定位数,所以左边超出的1位被舍弃,结果就是1100
;0110
左移两位就是在右边添加2位0,得出011000
,由于固定位数,所以左边超出的2位被舍弃,结果就是1000
,以此类推。右移也是同理,0110
右移1位就是0011
,右移2位就是0001
。
在C++中左移的运算符号是<<,右移的运算符号是>>。0110左移2位的代码就是0110 << 2,0110右移2位的代码就是0110 >> 2。
例如0001 + 0001的结果是0010,0010 + 0010的结果是0100,0011 +0011的结果是0110。可以看出:一个数乘以2就等于这个数左移一位,而一个数左移两位就是这个数乘以2的2次方,以此类推。而右移也是同理。对一个数右移一位作用等同于除2取整
对于二分查找:int mid = (left + right) >> 1;
&与运算
如果两个位均为 1,则对应的结果位将设置为 1。 否则,将对应的结果位设置为 0。
例如 1 & 1的结果是1;1 & 0或者0 & 1的结果是0,0 & 0的结果也是0。
而二进制运算0110 & 0100
的结果是0100
。可以看出与运算就是二进制各个位上对应的数进行与运算,都是1的时候结果是1,有一个0或者都是0的时候结果是0。
判断奇偶性:
当 num 是偶数时,num & 1 =0;
当 num 是奇数时,num & 1 = 1。
- n & 1 可以获取整数n的最低二进制位
| 或运算
1 | 1的结果是1;1 | 0或者0 | 1的结果是1,0 | 0的结果也是0。
而二进制运算0110 | 0100
的结果是0110
。可以看出或运算就是二进制各个位上对应的数进行或运算,都是1或者有一个是1的时候结果是1,都是0的时候结果是0。
^ 异或运算
1 ^ 1的结果是0;1 ^ 0或者0 ^ 1的结果是1,0 ^ 0的结果也是0。也就是说,异或相同的数结果是0,异或不同的数结果是1,而二进制运算0110 ^ 0100
的结果是0010
。
~取反运算
取反运算就是二进制各个位上的数,0变为1,1变为0。例如二进制运算~0110
的结果是1001
。
取反运算时,需要注意它的数据类型,不同的数据类型的位数都不相同,而上面也说过左边多出来的0可以省略,所以就算是同一个数,如
0b1101
,二进制位数是4位时结果是0b0010
,二进制位数是8位时结果是0b11110010
,它们的值是不一样的。所以,取反必须要注意它的数据类型哟~。
c++ 常用变量位数
- int
位数:32
最小值:-2147483648
最大值:2147483647 - unsigned int
位数:32
最小值:0
最大值:4294967295 - long
位数:32
最小值:-2147483648
最大值:2147483647 - float
位数:32
最小值:1.17549e-38
最大值:3.40282e+38 - double
位数:64
最小值:2.22507e-308
最大值:1.79769e+308 - size_t
位数:64
最小值:0
最大值:18446744073709551615 - string
位数:256
参考
https://blog.csdn.net/xiaoguyin_/article/details/79777836
https://blog.csdn.net/mars_xiaolei/article/details/100536467
https://leetcode.cn/circle/discuss/CaOJ45/