C语言学习第四天

目录

一.逻辑运算

 二.逻辑运算符

三.条件运算符

四.位运算符


一.逻辑运算

>        ,<        , ==        ,>=        ,<=        ,!=        

运算结果为bool型;

 二.逻辑运算符

逻辑非! :真则为假,假则为真;

逻辑与&&:同真为真,否则为假。当前面式子为假,后面式子不参与运算;

    int a=0,b=1;

    if(a+b>2&&a+b>0)//a+b=1<2 为假,不需要判断a+b>0
    {
        cout<<a+b<<endl;
    }
    else cout<<a-b<<endl;
    //输出为-1;

逻辑或||:同假为假,否则为真。当前面式子为真,后面式子不参与运算;

    int a=0,b=1;

    if(a+b<2||a+b<0)//a+b=1<2 为真,不需要判断a+b<0
    {
        cout<<a+b<<endl;//输出为1 
    }
    else
        cout<<a-b<<endl;

.条件运算符

?:

a?b:c 如果a为真,结果为b,否则为c;

.位运算符

2进制补码的形式参与运算

原码:最高位表示符号位,其他位表示大小;

反码:正数反码与原码相同,负数符号位不变,按位取反;

补码:正数补码与原码相同,负数符反码+1;

按位非~: 按位取反

公式 ~n=-(n+1);

按位与&:同1为1,否则为0

按位异或^:同则为0,否则为1;

按位或|:同0为0,否则为1;

左移:<< 地位补0

公式:n<<m n*(2)^m 等价与n乘以2的m次方

右移:>> 正数高位补0,负数高位补1;

公式:   n>>m 如果n为正数 等价于n除以2的m次方

                       如果n为负数 能整除 等价于n除以2的m次方

                                                不能整除 等价于n除以2的m次方-1


 

 特殊的复合位运算:

2的n次幂:!(x&(x-1))

1.当我们从2的幂中减去1时,我们得到一个数字,其中所有的位都被翻转,除了最右边的一位。例如,8(即2的3次幂)的二进制表示为1000。当我们从它减去1时,得到的是0111的二进制表示。

2.如果我们对一个2的幂和它的前一个数(即x和x-1)执行按位与(&)操作,我们得到一个数字,只有最右边的位被设置为0。例如,如果x=8,则x&(x-1)=1000 & 0111 = 0000。同样,如果x=16,则x&(x-1)=10000 & 01111 = 00000。

3.因此,如果x是2的幂,则x&(x-1)将为0。否则,它将是一个非零数字,只有最右边的位被设置为1。

奇偶数判断:x&1?"奇数":"偶数";

 

1.当我们对一个数x进行按位与(&)操作时,如果x的最右边一位为1,那么结果就是1;否则,结果为0。

2.因此,当x&1为1时,x的最右边一位为1,也就是x是奇数;当x&1为0时,x的最右边一位为0,也就是x是偶数

3.最后,根据x&1的结果,表达式返回"奇数"或"偶数"。如果x&1为真(即非0),则返回"奇数";否则,返回"偶数"。

判断正负数 n>>31?"负数":"正数" 

1.当我们对一个整数n进行算术右移(>>)操作时,如果n是正数,则最高位为0,算术右移后最高位填充0,结果仍为正数;如果n是负数,则最高位为1,算术右移后最高位填充1,结果仍为负数。

2.在32位计算机中,n>>31的结果将是一个32位整数,其中最高位为n的符号位。如果n是正数,则n>>31等于0;如果n是负数,则n>>31等于-1(即32位二进制表示为全1)。

3.最后,根据n>>31的结果,表达式返回"负数"或"正数"。如果n>>31为真(即等于-1),则返回"负数";否则,返回"正数"。


 

题目讲解:

char a=0xA3,b=^a>>4+1;

解:

a=163;

10100011数据溢出

163-256=-93;

a应该为-93

93

10000000 00000000 00000000 01011101

11111111    11111111  11111111    10100010//反码

11111111    11111111  11111111    10100011//补码

按位~

00000000 00000000 00000000   01011100

>>5

00000000 00000000 00000000 00000010 

        (int)b=2;

 有关数据溢出请看:

C语言学习第二天

其他运算符请看:

C语言学习第三天(运算符)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值