C++笔记--运算符

1 产生随机数

include<time.h> //time函数的头文件
//设置随机数种子,time(NULL)获取当前时间
    srand(time(NULL));

    //产生随机数据的函数rand()
    cout<<rand()<<endl;

2 位运算(二进制位运算)

2.1 &按位与

语法:全1为1,有0为0

特点:和1相与保持不变,和0相与为0

场景:将指定位清0


案例一:data为1字节 将data的第3,4为清0 ,其他位保持不变,按位与尽量写成16进制

unsigned char data;
data = data &1110 0111;  //计算机误认10进制
data =data &0xe7; //ok
data &=0xe7; 

2.2 |按位或

语法:有1为1,全0为0

特点:和1或 置1,和0或 保持不变

场景:将指定位 置1

案例二:data为1字节将data的第5,6为置1其他位保持不变

data = data | 0110 0000
data = data |0x60;
data |=0x60;  

2.3~按位取反

语法:0变1 1变0

~1100 0011 ==0011 1100

2.4 ^按位异或

语法:相同为0 不同为1

特点:和1异或 取反, 和0异或 保持不变

场景:将指定位发生翻转

2.5 左移<<:

左边丢弃 右边补0

移动的位数 不要超过 自身位的宽度

2.6 右移>>:

右边丢弃 左边补0(补1)

算术右移、逻辑右移都是编译器决定,用户无法决定

无符号数:右边丢弃 左边补0

有符号数:正数:右边丢弃左边补o

负数:右边丢弃左边补0(逻辑右移)

负数:右边丢弃左边补1(算术右移)

案例一:编写代码测试 编译器的右移方式

 short data = -10;  //计算机存的补码 1111 1111 1111 0110
    data = data>>4;
    cout<<bitset<16>(data)<<endl;  //1111111111111111 算数右移

2.7位运算综合应用

案例一:data为1字节,将data的第3,4位清0,其他位保持不变

data &= ~(0x01<<4 | 0x01<<3);   //取反和按位与等于清0

案例二:data为1字节 将data的第5,6位置1 其他位保持不变

data |= (0x01<<6 | 0x01<<5);

2.8 三目运算符 ? :

表达式1?值1:值2

如果表达式1为真整个表达式的值为值1 (引用)

如果表达式1为假整个表达式的值为值2(引用)

  cout<<(10>20? 10:20);
int data1 = 10;     //C++三目运算符的结果可以用来赋值
   int data2 = 20;
   (data1>data2?data1:data2)=200;
   cout<<"data1 = "<<data1<<endl; //10
   cout<<"data2 = "<<data2<<endl; //200
}

2.9 自增自减运算符

注意:

1 不管是i++,++i如果是独立的一条语句,两者没区别

2 ++在右边 先使用 后加减

j = i++; //j=i;i++;

3 ++在左边 先加减 后使用

j= ++i; //i++;j=i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值