一、cout实现输出其他进制
cout<<hex<<i<<endl; //输出十六进制数
cout<<oct<<i<<endl; //输出八进制数
cout<<dec<<i<<endl; //输出十进制数
cout<<bin<<i<<endl; //输出二进制数cout << bitset<10>(a) << endl;
// 输出16进制, setbase(int)可以设置8等。
cout << setbase(16) << i << endl;
二、前后缀运算
前缀运算是“先变后用”
后缀运算是“先用后变”
三、位运算符
1、位操作符使用整型的操作数,位操作符将其整型操作视为二进制位的集合,为每一位提供检验和设置功能。
操作符 | 功能 | 单双目 | 用法 |
---|---|---|---|
& | 按位与 | 双目运算符 | expr1& expr2 |
按位或 | 双目运算符 | ||
^ | 按位异或 | 双目运算符 | expr1^ expr2 |
~ | 取反 | 单目运算符 | ~expr1 |
<< | 左移 | 双目运算符 | expr1 <<expr2 |
>> | 右移 | 双目运算符 | expr1 >>expr2 |
四、按位操作的一个技巧
使用异或实现交换两个值,并且不使用第三方变量
a = a^b;
b = a^b;
a = a^b;
五、移位运算符
类型 | 左移 | 右移 |
---|---|---|
int | 低位补零 | 高位补符号位 |
unsigned int | 低位补零 | 高位补零 |
应用:用位移实现计算一个数的1的个数
int numberOf1(int n)
{
int count = 0;
while(n)
{
if(n&1)//查看n最低位是不是1
cout++;
n>>1;
}
return count;
}
六、赋值转换
内存范围大的传换为小的,高位舍去,例:int(4byte)转换为unsigned short(2byte)
short a = 0x1111FFFF;//得到的a为0xFFFF
取值范围小的赋给范围大的,符号位扩展,例:char转换为int
chat a = 0xe0;
int b = a;//0xe0为11010000符号位为1,所以b = 0xffffffe0;
注意:unsigned short a;//a 的最大值为65536.当内存溢出时,计算a的值为a%65536,即循环从头数