操作符(‘/ ‘ ‘%‘ ‘&‘ ‘|‘ ‘<< ‘‘>>‘)的应用及注意事项

#define _CRT_SECURE_NO_WARNINGS 1 
#include<stdio.h>
int main()
{
    //除号/
    int a = 6/5;//结果为1; 整数除法
    printf("%d\n", a);
    float c = 6.0 / 5;
    printf("c=%lf\n", c);//1.200000
    float d = 6 / 5.0;
    printf("d=%lf\n", d);//1.200000
    //取余%
    int f = 7 % 3;
    printf("f=%d\n", f);//%为取余,余1          %两侧不能为小数!!!!!!!!
                 
               //内存中存放的是二进制的补码
            //原码:数值的对应的二进制,,,反码:符号位不变,其他位按位取反 补码:反码+1
         // 对应正整数,原码反码补码相同
       //内存中存放的是二进制的补码      正整数的二进制表示有三种,原码,反码,补码
     //原码:数值的对应的二进制,,,反码:符号位不变,其他位按位取反 补码:反码+1
   //如果是正整数的话,将原码直接左移右移(左移右移操作符)就可以了,因为他的原码就是补码,如下                     
    int g = 2;
    int h =g>> 1;//(右移操作符>> (向右移动一位))
    printf("h=%d\n", h);//打印结果为1   因为2的二进制是00000000000000000000000000000010向右移动后为
                                                     //00000000000000000000000000000001,二进制是1
    //如果是负整数,需要将数转化为二进制的原码---反码---补码---(左移或右移)新的补码---反码---原码,如下
    int i = -10;
    int j = i >> 1;     
    printf("j=%d\n", j);//打印结果为-5
                   //-10的原码为1000000000000000000000000000000000001010
                        //反码为1111111111111111111111111111111111110101(原码除第一位不变,其他位取反)
                        //补码为1111111111111111111111111111111111110110(反码加1)(存储在电脑中)
                        //  变为1111111111111111111111111111111111111011右移操作符(算术右移)
                  //显示时反码为1111111111111111111111111111111111111010(补码-1)
                        //原码为1000000000000000000000000000000000000101(反码取反)(打印出来为-5)
                        
    //&---按位与(2进制) 
    int k = 3;
    int l = 5;
    int m = k & l;
    printf("m=%d\n",m);//打印结果为1
                        //3的二进制是00000000000000000000000000000011
                        //5的二进制是00000000000000000000000000000101
              //按位与,(有1和0,取0) 00000000000000000000000000000001,为1
     //|---按位或(2进制)     
    int n = 3;
    int o = 5;
    int p = n | o;
    printf("p=%d\n", p);//打印结果为7,因为3的二进制是00000000000000000000000000000011
                        //5的二进制是                 00000000000000000000000000000101
                               //按位与,(有1和0,取1) 00000000000000000000000000000111,为7
    //^---按位异或(2进制)(相同为0,相异为1)
    int q = 3;
    int r = 5;
    int s = q ^ r;
    printf("s=%d\n", s);//打印结果为6,因为3的二进制是00000000000000000000000000000011
                        //5的二进制是                 00000000000000000000000000000101
                        //按位异或,(相同为0,相异为1) 00000000000000000000000000000110,为6
                        
    //不能用第三个值,交换t ,u
    //方法一:(适用于数值不是超级大的数,否则转化为二进制就过大,溢出)
    int t = 3;
    int u = 5;
    printf("t=%d u=%d\n", t,u);
    t = t + u;
    u = t - u;
    t = t - u;
    printf("t=%d u=%d\n", t,u);
    //方法2:(异或)       //a^a=0;   0^a=a;   相同为0,不同为1
    int t = 3;              //a^b^b=a;   
    int u = 5;
    printf("t=%d u=%d\n", t, u);
    t = t ^ u;
    u = t ^ u;
    t = t ^ u;
    printf("t=%d u=%d\n", t, u);
    return 0; 
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力成为焦耳定律鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值