1、左移右移; 2、面试题:不创建其他变量,实现两个数交换;3、单目操作符sizeof;4、360面试题;5、逗号表达式

操作符

1、左移右移

左移:左边抛弃,右边补0
右移:(1)逻辑移位:左边用0填充,右边丢弃(2)算术移位:左边用原来该值的符号填充,右边丢弃。
正数的原码,反码,补码一样;负数反码为原码符号位不变,其他按位取反;补码为反码+1

int num = 10;
int b = num >> 1;
//num本身的值不会变

2、面试题:不创建其他变量,实现两个数交换

//方法1;会出现a+b太大导致溢出
#include "stdio.h"
int main(){
    int a = 10;
    int b = 20;
    a = a + b;
    b = a - b;
    a = a - b;
    printf("a = %d b = %d\n", a , b);
    return 0;
}

//方法2;最优选择
#include "stdio.h"
int main(){
    int a = 10;
    int b = 20;
    a = a^b;
    b = a^b;
    a = a^b;
    printf("a = %d b = %d\n", a , b);
    return 0;
}

3、单目操作符sizeof在这里插入图片描述

sizeof计算变量大小可省略(),这证明sizeof是操作符不是函数。计算int类型不可以省略()

#include "stdio.h"
int main(){
    short s = 5;
    int a = 10;
    printf("%d\n", sizeof(s = a+2));
    printf("%d\n", s);
    return 0;
}

在这里插入图片描述
在这里插入图片描述
sizeof(s = a+2)时判断到s是short类型就结束;sizeof的括号里不参与运算。况且s是早已经开辟了空间的,不会因为a是int就把s变成int,顶多将a+2削减为short

4、360面试题

#include "stdio.h"
int main(){
    int i= 0,a = 0,b = 2,c = 3,d = 4;
    i = a++ && ++b && d++;
    printf("a = %d\n b = %d\n c = %d\n d = %d\n", a,b,c,d);
    return 0;
}

在这里插入图片描述
a++先计算a再++;因为a是0,&看到0后面的就不运算了

5、逗号表达式

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果

#include "stdio.h"
int main(){
    int a = 1;
    int b = 2;
    int c = (a = b + 10, a, b = a + 1);
    printf("%d\n", c);
    return 0;
}

//>>c =  13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值