C++知识点

正整数的十进制转换二进制

将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取除得的余数,即换算为二进制数的结果。只需记住要点:除二取余,倒序排列。

由于计算机内部表示数的字节单位都是定长的,以2的幂次展开,或者8位,或者16位,或者32位....。于是,一个二进制数用计算机表示时,位数不足2的幂次时,高位上要补足若干个0。

eg: 125 转换为二进制

十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。(具体用法如下图)

一、运算符概述
C++运算符是指用于执行特定操作的符号或符号组合。以下是常见的C++运算符:

算术运算符:加(+)、减(-)、乘(*)、除(/)、取余(%)等。

比较运算符:等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等。

逻辑运算符:与(&&)、或(||)、非(!)等。

           非 !的   例子

位运算符:按位与(&)、按位或(|)、异或(^)、左移(<<)、右移(>>)等。

赋值运算符:赋值(=)、复合赋值(+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=)等。

条件运算符:条件表达式(? : )。

逗号运算符:逗号(,)。

成员访问运算符:点(.)、箭头(->)。

自增自减运算符:自增(++)、自减(–)。

类型运算符:sizeof。

强制类型转换运算符:static_cast、reinterpret_cast、dynamic_cast、const_cast。

其他运算符:new、delete、地址运算符(&)、间接寻址运算符(*)、条件编译运算符(#if、#else、#endif)、lambda运算符([])等。

用算术运算符将运算对象连接起来的,符合C++语法规则的表达式,称为C++算术表达式,运算对象包括常量、变量、函数返回值等。例如:

特别地:

需要一个运算对象的叫单目运算符。

需要两个运算对象的叫双目运算符。

需要三个运算对象的叫三目运算符。

需要多个运算对象的叫多目运算符。

二、算术运算符
算术运算符有:加(+)、减(-)、乘(*)、除(/)、取余(%)等。

(1)除(/)的取整:如果 / 的所有运算对象都是整数, / 的功能就是取整。

5/3 == 1;
5/2 == 2;
(2)除(/)的除法运算符:如果 / 有一个运算对象是实型, / 的功能就是除法运算。

5/2.0 == 2.5;
(3)取余(%)运算符。

5%2 == 1;
3%5 == 3;
示例:键盘输入一个数,判断能否被3整除。

#include <iostream>
 
using namespace std;
 
int main()
{
    int data = 0;
    cout << "请输入一个整数:";
    cin >> data;
    if (data % 3 == 0)
        cout << data << " 可以被 3 整除" << endl;
    else
        cout << data << " 不可以被 3 整除" << endl;
 
    return 0;
}

输出:

请输入一个整数:16
16 不可以被 3 整除
使用rand()函数产生一个60~100的随机数。

// 60= 60 + 0;
// 100 = 60 + 40;
// 因此,data%n=n-1;推导出 n-1=40;所以n=41; 
// 所以取余的数是41。
rand()%41 + 60;
使用rand()函数产生一个'a' ~ 'z' 的随机字母。

// 'a'= 'a' + 0;
// 'z' = 'a' + 25;(26个字母,从0开始算就是0~25)
// 因此,data%n=n-1;推导出 n-1=25;所以n=26; 
// 所以取余的数是41。
rand()%26 + 'a';
三、复合运算符
用符合运算符获得12的个位

+=、-=、*=、/=、%=等。

a+=b;// a=a+b;
a-=b;// a=a-b;
a/=b;// a=a/b;
a%=b;// a=a%b;
特别需要注意的是:一定要把等号右边看成一个整体。

int a=3;
a*=4+5;//a=a*(4+5);
// a=27;
示例:

int a=0;
a+=a-=a*=a;//根据运算符优先级,从右往左运算;
// a=0;
// 规律,只要看到中间有a-=a;则必定为0。
四、关系运算符
等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等。

特别需要注意的是,等号一定要在右边。

=< 是错误的。
=< 是错误的。
示例:

五、逻辑运算符
与(&&)、或(||)、非(!)等。

输入一个整数,1到7,如果6或者7,输出放假

否则输出上学

(1)与(&&):只要有一个为假,则整个表达式为假,否则为真。
(2)或(||):只要有一个为真,则整个表达式为真,否则为假。
(3)非(!):把真变为假,假变为真。

需要注意的是,&&和||都有一些特性:

如果 && 中检测到一个对象为假,则直接判断为假,因为后面的判断对结果已经不起影响了。

如果 || 中的检测到一个对象为真,则直接判断为真,因为后面的判断对结果已经不起影响了。

在c语言中,除了0是假,其他都为真。

六、位运算符(二进制位运算)
按位与(&)、按位或(|)、异或(^)、左移(<<)、右移(>>)等。

6.1、& 按位与
规律:全1为1,有0为0。
特点:和1相与保持不变,和0相与为0。
场景:将指定位清零。

  1100 0011
& 1111 0000
---------------
  1100 0000
示例:将一个字节的第三第四位清零,其他保持不变。

unsigned char data;
data=data & 0xe7;// 0xe7 = 1110 0111
data&=0xe7;//等效
6.2、| 按位或
规律:全0为0,有1为1。
特点:有1置1,有0保持不变。
场景:将指定位置1。

  1100 0011
| 1111 0000
---------------
  1111 0011
示例:将一个字节的第五、六个位置置1,其他保持不变。

unsigned char data;
data=data | 0x60;// 0x60 = 0110 0000
data|=0x60;//等效
6.3、~ 按位取反
规律:0变1,1变0。

一般用来配合其他位运算符。

~1100 0011 = 0011 1100;
6.4、^ 按位异或
规律:相同为0,不同为1。
特点:和1异或取反,和0异或保持不变。
场景:将指定位发生翻转。

  1100 0011
^ 1111 0000
---------------
  0011 0011
6.5、<< 左移:左边丢弃,右边补零
移动的位数不要超过自身位的宽度。


规律:左移多少,相当于乘上2的n次方。

char data=0000 0001;
// 左移0位:
data=data<<0;// = data*2^0;
// 左移1位:
data=data<<1;// = data*2^1;
// 左移2位:
data=data<<2;// = data*2^2;
// 左移3位:
data=data<<3;// = data*2^3;
// ......
 
6.5、>> 右移:右边丢弃,左边补0或补1

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

无符号:右边丢弃,左边补0。

有符号:

正数:右边丢弃,左边补0。

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

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

规律:左移多少,相当于除上2的n次方。

unsigned char data=1000 0000;
// 左移0位:
data=data>>0;// = data除上2^0;
// 左移1位:
data=data>>1;// = data除上2^1;
// 左移2位:
data=data>>2;// = data除上2^2;
// 左移3位:
data=data>>3;// = data除上2^3;
// ......
 
七、三目运算符 ?:
C++中的三目运算符是一种条件表达式,也称为条件运算符。它的语法如下:

condition ? expression1 : expression2;
其中,condition是一个条件表达式,如果它的值为真,则返回expression1的值;否则,返回expression2的值。

例如,以下代码使用三目运算符计算两个数的最大值:

#include <iostream>
using namespace std;
 
int main() {
    int a = 10;
    int b = 20;
    int max_num = (a > b) ? a : b;
    cout << "Max number is " << max_num << endl;
    return 0;
}
输出结果为:

Max number is 20
在上面的代码中,如果a大于b,则max_num等于a,否则max_num等于b。

八、运算符优先级
C++中运算符的优先级如下(从高到低):

优先级    运算符类型    运算符
1    括号    ()
2    一元运算符    ++ -- ! ~ + - * & sizeof new delete
3    强制类型转换    (type)
4    乘除模运算符    * / %
5    加减运算符    + -
6    移位运算符    << >>
7    关系运算符    < <= > >=
8    相等运算符    == !=
9    按位与运算符    &
10    按位异或运算符    ^
11    按位或运算符    |
12    逻辑与运算符    &&
13    逻辑或运算符    ||
14    条件运算符    ?:
15    赋值运算符    = += -= *= /= %= <<= >>= &= ^= |=
16    逗号运算符    ,
注意,优先级从上到下,越靠上的优先级越高。例如,括号优先级最高,因此括号内的运算会先被执行。而逗号运算符的优先级最低,因此它的运算会在其他运算完成后才会被执行。

九、自增自减运算符
C++ 中的自增运算符(++)和自减运算符(–)是一种特殊的算术运算符,用于增加或减少一个变量的值。它们可以作为前缀或后缀操作符使用。

前缀形式:操作符位于变量名之前(例如 ++i),此时变量的值会在计算前先自增或自减一次,然后返回该变量的新值。

后缀形式:操作符位于变量名之后(例如 i++),此时变量的值会在计算之后自增或自减一次,但是表达式的结果仍为原始值,只有下一次使用该变量时才会体现出自增或自减的效果。

示例:

int i = 1;
cout << ++i; // 输出 2,因为 i 先自增一次再输出
cout << i++; // 输出 2,但 i 的值已经自增了一次,下一次使用 i 时就会体现出来
cout << i;   // 输出 3,因为 i 自增了一次
十、案例:产生随机数
rand()函数是一个伪随机数,所以每次产生随机数之前必须要设置随机数种子,使用srand()函数。为了保证每次执行都会设置一个变化的种子,我们把时间传给srand()。种子只需要设置一次。

#include <iostream>
#include <time.h>
using namespace std;
 
int main()
{
    srand(time(NULL));
    cout<<rand()<<endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值