操作符详解

本文详细介绍了C/C++编程中的各种操作符(算术、移位、位、赋值、单目等),以及进制转换、原码、反码和补码的概念,还有数组下标引用和函数调用等内容,为程序员提供基础语言理解指南。
摘要由CSDN通过智能技术生成

操作符分类:

• 算术操作符: + 、- 、* 、/ 、%
• 移位操作符: << >>
• 位操作符: & | ^
• 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
• 单⽬操作符: !、++、--、&、*、+、-、~ 、sizeof、(类型)
BB关系操作符: > 、>= 、< 、<= 、 == 、 !=
• 逻辑操作符: && 、||
• 条件操作符: ? :
• 逗号表达式: ,
• 下标引⽤: []
• 函数调⽤: ()

结构成员访问: . 、->

16进制中数字:1 2 3 4 5 6  7  8 9  a    b   c  d   e    f

                                                      10  11 12 13 14 15

一  .2进制转10进制:

2进制和10进制是类似的,只不过2进制的每⼀位的权重,从右向左是:2的0次方,2的1次方....2的31次方。

例如:1011=1*1+1*2+0*4+1*8=11

二   .10进制转化为2进制:

10进制数/2=最后一位余数~第一位余数组成的数排列一起为二进制数

例如 15/2=7...1;7/2=3...1;3/2=1...1;1/2=0...1

故15二进制数为1111

三   .2进制换为8进制:

每三位换为一位,不够添零;

例如  二进制11 001 111    =八进制  3 1 7

四   .二进制转为16进制

每4位换位一位,不够添0

例如:二进制1011 0101 0111=16进制 b 5 7

五.    原码、反码、补码:

原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。

反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。

补码:反码+1就得到补码。

正整数的原、反、补码都相同。
负整数的三种表⽰⽅法各不相同。

符号位都是⽤0表⽰“正”,⽤1表⽰“负。

补码得到原码也是可以使⽤:取反,+1的操作。

对于整形来说:数据存放内存中其实存放的是补码。

六.  移位操作符(<< 左移操作符
>> 右移操作符
注:移位操作符的操作数只能是整数。)

1.左移操作符  :左边抛弃、右边补0

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int n = 0;//令n=10    原=反=补=00000000000000000000000000001010
    scanf("%d", &n);//              00000000000000000000000000010100=20
    n = n << 1;
    printf("%d", n);
    return 0;
}//<<1位有*2效果

2.右移操作符

1. 逻辑右移:左边⽤0填充,右边丢弃

    算术右移:左边⽤原该值的符号位填充,右边丢弃

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int n = 0;//令n=10    原=反=补=00000000000000000000000000001010
    scanf("%d", &n);//             00000000000000000000000000000101=5
    n = n >> 1;
    printf("%d", n);
    return 0;
}//>>1位有/2效果

七. 位操作符:&、|、^、~

& 有0全为0

|  有1全为1

^  相同为0,相异为一

~ 全取反

1.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a = 5;                                       //补码00000000000000000000000000000101
    int b = -7;//10000000000000000000000000000111      补码11111111111111111111111111111001
    printf("%d\n", a & b);//                           补码00000000000000000000000000000001=1 &
    printf("%d\n", a | b);                           //    11111111111111111111111111111101  原码                       

                                                                     =100000000000000000000000000000000011=-3 |
    printf("%d\n", a ^ b);//                               11111111111111111111111111111100      

                                                                      100000000000000000000000000000000100=4 ^
    printf("%d\n", ~a);                               //   11111111111111111111111111111010                         

                                                                100000000000000000000000000000000110=-6 ~
    return 0;
}

不能创建临时变量(第三个变量),实现两个整数的交换。

#define _CRT_SECURE_NO_WARNINGS
//a^a=0    b=a^b^b      a=a^a^b
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    printf("%d %d", a, b);
    return 0;
}

求⼀个整数存储在内存中的⼆进制中1的个数。

1.#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int Add(int n)
{
    int count = 0;
    while (n)
    {
        if (n % 2 == 1)
        {
            count++;
        }
        n = n / 2;
    }
    return count;
}
int main()
{
    int n = 0;
    scanf("%d", &n);
    int c = Add(n);
    printf("%d", c);
    return 0;
}

2.#include <stdio.h>
int Add(int n)
{
    int count = 0;
    int i = 0;
    while (n)
    {
        for (i = 0; i < 32; i++)
        {
            if((n>>i)&1==1)
                count++;
        }
        return count;
    }
}
int main()
{
    int n = 0;
    scanf("%d", &n);
    int c = Add(n);
    printf("%d", c);
    return 0;
}

3.#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int Add(int n)
{
    int count = 0;
    while (n)
    {
        n = n & (n - 1);
        count++;
    }
    return count;
}
int main()
{
    int n = 0;
    scanf("%d", &n);
    int c = Add(n);
    printf("%d", c);
    return 0;
}

编写代码将13⼆进制序列的第5位修改为1,然后再改回0

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a = 10;
    int n = 0;      //0000000000000000000000000001010       & 11111111111111111111111111101111
    scanf("%d", &n);
    a = a | (1 << (n - 1));//a=(~(1<<(n-1)))&a
    printf("%d\n", a);
    a = (~(1 << (n - 1))) & a;
    printf("%d\n", a);
    return 0;
}

八   ( 单⽬操作符)

!、++、--、&、*、+、-、~ 、sizeof、(类型)

九(逗号表达式)

exp1, exp2, exp3, …expN

逗号表达式,就是⽤逗号隔开的多个表达式。
逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果

十.下标访问[]、函数调⽤()

1.[ ] 下标引⽤操作符
操作数:⼀个数组名 + ⼀个索引值(下标)

2.2 函数调⽤操作符
接受⼀个或者多个操作数:第⼀个操作数是函数名,剩余的操作数就是传递给函数的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值