设为首页 加入收藏

TOP

C语言位运算符的基础普及(五)
2013-11-20 14:18:41 】 浏览:900
Tags:语言 运算 符的 基础 普及


    3、交换两个值,不用临时变量
    例如:a=3,即11(2);b=4,即100(2)。
    想将a和b的值互换,可以用以下赋值语句实现:
    a=a∧b;
    b=b∧a;
    a=a∧b;
    a=011(2)
    (∧)b=100(2)
    a=111(2)(a∧b的结果,a已变成7)
    (∧)b=100(2)
    b=011(2)(b∧a的结果,b已变成3)
    (∧)a=111(2)
    a=100(2)(a∧b的结果,a已变成4)
    等效于以下两步:
    ①执行前两个赋值语句:"a=a∧b;"和"b=b∧a;"相当于b=b∧(a∧b)。
    ②再执行第三个赋值语句: a=a∧b.由于a的值等于(a∧b),b的值等于(b∧a∧b),
    因此,相当于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,等于b.
    很神奇吧!
    c语言源代码:
    #include <stdio.h>
    main()
    {
    int a=3;
    int b = 4;
    a=a^b;
    b=b^a;
    a=a^b;
    printf("a=%d b=%d",a,b);
    }
    4、"取反"运算符(~)
    他是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1.
    例如:~77(8)
    源代码:
    #include <stdio.h>
    main()
    {
    int a=077;
    printf("%d",~a);
    }
    5、左移运算符(《)
    左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负
    值),其右边空出的位用0填补,高位左移溢出则舍弃该高位。
    例如:将a的二进制数左移2位,右边空出的位补0,左边溢出的位舍弃。若a=15,即00001111(2),左移2
    位得00111100(2)。
    源代码:
    #include <stdio.h>
    main()
    {
    int a=15;
    printf("%d",a《2);
    }
    左移1位相当于该数乘以2,左移2位相当于该数乘以2*2=4,15《2=60,即乘了4.但此结论只适用于该
    数左移时被溢出舍弃的高位中不包含1的情况。
    假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=64时,左移一位时溢出的是0
    ,而左移2位时,溢出的高位中包含1.
    6、右移运算符(》)
    右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负
    值),移到右端的低位被舍弃,对于无符号数,高位补0.对于有符号数,某些机器将对左边空出的部分
    用符号位填补(即"算术移位"),而另一些机器则对左边空出的部分用0填补(即"逻辑移位")。注
    意:对无符号数,右移时左边高位移入0;对于有符号的值,如果原来符号位为0(该数为正),则左边也是移
    入0.如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。有的系统移入0,有的
    系统移入1.移入0的称为"逻辑移位",即简单移位;移入1的称为"算术移位".
    例: a的值是八进制数113755:
    a:1001011111101101 (用二进制形式表示)
    a》1: 0100101111110110 (逻辑右移时)
    a》1: 1100101111110110 (算术右移时)
    在有些系统中,a》1得八进制数045766,而在另一些系统上可能得到的是145766.Turbo C和其他一些C
    编译采用的是算术右移,即对有符号数右移时,如果符号位原来为1,左面移入高位的是1.
    源代码:
    #include <stdio.h>
    main()
    {
    int a=0113755;
    printf("%d",a》1);
    }
    7、位运算赋值运算符
    位运算符与赋值运算符可以组成复合赋值运算符。
    例如: &=, |=, >>=,《=, ∧=
    例: a & = b相当于 a = a & b
    a 《 =2相当于a = a 《 2

      

首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于C语言指针的问题 下一篇几个C库函数的源码

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目