精华内容
下载资源
问答
  • C语言位操作基础详解与实战

    万次阅读 多人点赞 2018-12-02 19:10:20
    1、与&  1)“与”:& “逻辑与”:&&  2) 真值表:1&0 = 0 、0&1 = 0、0&0 = 0、1&1 = 1 只有当1与1与时才是1,其他的值相与都是0  3...

    1、位与&
          1)“位与”:&   “逻辑与”:&&
          2)  真值表:1&0 = 0  、0&1 = 0、0&0 = 0、1&1 = 1         只有当1与1位与时才是1,其他的值相与都是0
          3)“位与”就是把2个十六进制的数先分别转换为二进制,然后再相与。“逻辑与”就是把2个十六进制分别看成2个整体,2个整体相与。
                  例子:0xA & 0xB = 0xA   //位与                               0xA && 0xB = 1 //逻辑与
                              0xA:1 0 1 0                                                   0xA = 1 (ture)
                              0xB:1 0 1 1                                                   0xB = 1 (ture)
                              位与: 1 0 1 0                                                    逻辑与 : 1

    2、位或|
         1)“位或”:|    “逻辑或”:||
         2)  真值表:1|0 = 1  、0|1 = 1、0|0 = 0、1|1 = 1           只有两个0位或的时候才是0,其余的都是1
         3)  “位或”就是把2个十六进制的数先分别转换为二进制,然后再位或;“逻辑或”就是把2个十六进制分别看成2个整体,2个整体位或。
                   例子:0xA | 0xB = 0xB                                                 0xA || 0xB = 1
                               0xA:1 0 1 0                                                      0xA = 1 (ture)
                               0xB:1 0 1 1                                                      0xB = 1 (ture)
                                位或: 1 0 1 1                                                      逻辑或 : 1

    3、位取反 ~

         1)“位取反”:~     “逻辑取反”:!
         2)“位取反”就是把十六进制数先转换为二进制,然后把每一位取反(1取反就变为0,0取反就为1);“逻辑取反”就是把十六进制数看成一个整体,然后取反(非0的数都是为真,逻辑取反后为假;0逻辑取反为真)。
                    3) 例子:0xA =  1 0 1 0                                                              0xA (非0为真(即1))
                        ~0xA =  0 1 0 1 = 0x5                                                              !0xA = 0
                       ~~0xA = 1 0 1 0 = 0xA                                                             !!0xA = 1    
        
    4、位异或 ^
        1) “位异或”: ^  
        2) 真值表:1^0=1    0^1=1   0^0=0   1^1=0         两个数相等则为0,不相等则为1
        3) 例子: 66 ^ 33 = 99
                         66: 1 0 0 0 0 1 0
                         33: 0 1 0 0 0 0 1
                         99: 1 1 0 0 0 1 1

                  代码:   unsigned int a = 66, b = 33;
                                 unsigned int c = a^b;
                                 printf("c = %d ", c);

    5、左移位<<     右移位>>
            无符号数,左移时在右边补0,右移时在左边补0


    二.位操作的实际应用

            一般在操作寄存器的时候使用,如32位的arm寄存器,每个位代表的pin脚不同,效果也不同。有时候你只想改变某个pin脚的值从而实现某项功能,其余pin脚保持不变,就得使用位操作,只对目标位进行操作。操作的方式是:读->改->写。不要直接给寄存器赋目标值是因为你只知道要把目标位设置为某值,但是其他的位你并不知道原本是多少,所以要先读取这个寄存器的整体值,然后再修改其中的目标位,然后再把修改后的值写到寄存器。

    1)特定位清零用&
                 譬如:将0xAAAAAAAA 的bit8 ~bit15清零,其他位保持不变。
                 分析:[位与]任何数(0/1)与1位与时为本身,与0位与为0,所以可以用位与的方式。
                             unsigned int a = 0xAAAAAAAA;
                             unsigned int b = 0xFFFF00FF;
                             unsigned int c;
                             c = a & b;
                             printf("c = 0x%x ", c);    //c = 0xaaaa00aa

    2)特定位 置1用 |
          譬如:将0xffff00ff的bit8 ~bit15置1,其他位保持不变。
          分析:位或   任何数(0/1)与1位或变为1,与0位或为本身

                      unsigned int a = 0xffff00ff;
                      unsigned int b = 0x000ff00;
                      unsigned int c;
                      c = a | b;
                      printf("c = 0x%x ", c);    // = 0xffffffff

    3)特定位取反用 ^
          譬如:将0xffff00ff的bit8 ~bit15取反,其余保持不变
          分析:位异或  任何数(0/1)与1位异或会取反,与0位异或为本身
        
                      unsigned int a = 0xffff00ff;
                      unsigned int b = 0xff00;
                      unsigned int c;
                      c = a ^ b;
                      printf("c = 0x%x ", c);    // = 0xffffffff


    三、特定二进制数的获取
           由于上面示例中的unsigned int b的值太过于呆板,后续看代码的时候可能不知道为什么是这个值,所以需要以另外的方式来表达(主要是通过位移和位取反来获取这个特定的二进制数)。

    (1)    譬如:unsigned int b = 0xff00; 中的0xff00
             可表示为:0xFF<<8    (0xFF :8个二进制1   <<: 左移   8: 8位)

    (2)    需要一个bit3 ~bit7,bit23~bit25为1的数(隐含意思是其他位都为0)
             可为:0x1F<<3 | 0x7<<23
                        1F (7-3+1=5个1,转换为十六进制则为1F);
                         7  ( 25-23+1=3个1,转换为十六进制则为7)
                          |  ( 位或,任何数与1位或都为1,与0位或为本身,所以这里用位或就相当于把这2个位移后的数叠加起来)

    (3)    需要一个bit3 ~ bit7为0的数
             可为:~(0x1F<<3)

           总结:当需要的1比较少,需要的0比较多,就使用1位移的方式;当需要的0比较少,需要的1比较多,就使用位移然后取反的方式;当需要的数比较复杂,如bit3 ~bit7,bit23~bit25为1,就可以先位移然后位或的方式。

    展开全文
  • 计算机基础----32位操作系统和64位操作系统的区别

    万次阅读 多人点赞 2019-01-18 18:01:57
    众所周知,我们通常说操作系统是32位还是64位说的是32位处理器或64位处理器,windows系统有32位和64位,但是最近被问到32位操作系统和64位操作系统有什么区别?一时间只能想到64位操作系统更快,其他具体区别却说不...

    众所周知,我们通常说操作系统是32位还是64位说的是32位处理器或64位处理器,windows系统有32位和64位,但是最近被问到32位操作系统和64位操作系统有什么区别?一时间只能想到64位操作系统更快,其他具体区别却说不上来,今天总结一下

    首先了解操作系统和64位处理器的概念

    操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

    64位处理器:之所以叫做“64位处理器”,是因为电脑内部都是实行2进制运算,处理器(CPU)一次处理数据的能力也是2的倍数。8位、16位、32位和64位处理器,其计数都是2的倍数。一次处理的数据越大,该电脑处理信息的能力越来越大;因此64位处理在先天就比32位处理器具有快速的能力。

    那为什么不用更高级的128位处理器呢?因为位数越高,处理器芯片的设计也就越复杂,目前的技术水平暂时无法制造这么复杂的芯片。

    我们从以下的方面来看一下区别:

    一:支持的内存不同

    32位的操作系统,最多支持4G的内存,实际内存为3.25G;64位系统支持4G 8G 16G 32G 64G 128G 256G内存,理论上可以无限支持,只要主板上有足够的内存条。
    鼠标右击计算机---->点击属性,就可以看到自己电脑系统的相关配置,下面是我的电脑系统配置
    在这里插入图片描述
    二:支持的处理器不同

    64位的操作系统支持基于64位的处理器,而32位的系统却不能完全支持64位的处理器。
    在这里插入图片描述
    三、支持的软件不同

    32位的操作系统,支持基于32位的软件,不能运行64位的软件;而64位的系统一般这两种类型的都支持,基本上与各种软件都兼容,特别是adobe公司的软件,现在的新版本的都只支持64位。
    我们在下载软件是通常会发现让我们选择对应操作系统是32位还是64位的软件。

    四、处理数据的能力

    64位CPU GPRs的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据(只要两个指令,一次提取8个字节的数据),比32位(需要四个指令,一次提取4个字节的数据)提高了一倍,理论上性能会相应提升1倍。

    64位处理器的优势还体现在系统对内存的控制上。由于地址使用的是特殊的整数,因此一个ALU(算术逻辑运算器)和寄存器可以处理更大的整数,也就是更大的地址。
    五、系统体积大小

    64位系统都比32位系统大的多,比如win7 64位比win7 32位系统大700M左右。

    强烈建议大家使用64位操作系统,现在64位操作系统已经是主流,并且软件更新也会先从64位操作系统开始。

    展开全文
  • 位操作的应用实例(2)位掩码

    千次阅读 2020-07-19 16:53:21
    掩码(bit mask),说白了是应用运算来实现一些复杂的操作,利用二进制的1和0来实现。 例题1:给定了 32 整数 N 和 M,如何将 N 的 i 到 j 位置是 1,2,3,…32)设 置 为 和 M 中 相 同 的 值 。 例...

    位掩码(bit mask),说白了是应用位运算来实现一些复杂的操作,利用二进制的1和0来实现。

    例题1:给定了 32 位整数 N 和 M,如何将 N 的 i 到 j 位(位位置是 1,2,3,…32)设 置 为 和 M 中 相 同 位 的 值 。

    例 如 , N = 00000000000000000000000001111011,
    M = 00000000001000000011000000011000, i = 10, j = 20;那么,结果应该是 00000000001000000011000001111011

    分析: 我们首先根据题意重现需要做的操作:( 1)我们需要从 M 中 get 第 i 到第 j 个位( 2)我们需要 clear N 中第 i 到第 j
    个位( 3)我们需要 set N 中第 i 到第 j 个位。

           对于( 1),根据基本操作, get bit 需要&1,所以与 M 进行操作的位掩码在第 i 到第 j 位应当为 1,其他位为 0。对于( 2),根据基本操作, clear bit 需要&0,所以与 N 进行操作的位掩码在第 i 到第j 位应当为 0,其他位为 1。注意,这个位掩码刚好是前一项操作位掩码的位反运算。对于( 3),我们只需要将( 1),( 2)的操作结果进行位或即可。构造所需位掩码的过程如前所述,对~0 进行基本操作和加减法即可。

    参考解答:

    #define INT_BIT_LENGTH (32)
    void setBits(unsigned int &N, unsigned int M, int i, int j) {
        unsigned int max = ~0;
        unsigned int bitMask = (max << (INT_BIT_LENGTH - i) |
            max >> j); //11..100..011..1
        N = (M & (~bitMask)) | (N & bitMask);
    }

     

    例题2:将一个整数中相邻的奇数位和偶数位交换(位位置是 1,2,3,…32)。

    分析: 同样的,我们首先根据题意重现我们需要做的操作:
    ( 1)我们需要 get 奇数位,根据基本操作易得需要与形如 1010…10的位掩码做位与。( 2) get 偶数位,根据基本操作易得需要与形如0101…01 的位掩码做位与。( 3) swap 意味着将( 1)中得到的结果右移一位,与( 2)中得到的结果左移一位,然后做位或操作。由此可见, 对于需要进行比特操作的题目,对题目要求进行分步,然后选择合适的位掩码,最后与给定二进制数进行基本位操作都是解题的关键。

    参考解答:

    int swapBits(int input) {
        return ((0xaaaaaaaa & input) >> 1) | ((0x55555555 & input) << 1);
    }

     

    应用实例:

    比如在管理系统中需要添加一个邮件管理,这个管理可以让用户决定几种类型的邮件接收与否。

    每个用户可以在自己的后台进行设置,比如现在有4种类型的邮件emailTypeA,  emailTypeB,  emailTypeC,  emailTypeD .

    我在后台用户表添加了4个字段,属性true或false,这个每个用户可以设置修改自己的邮件接收与否。

    做完后,用户那边的后台提出个问题,如果邮件类型在多一种或者几种的话,那必然要去修改数据库,后台代码和前端代码,如果使用位掩码来实现,则是一种比较好的思路。

    刚才说的4种属性,那么我们就可以用4位的二进制就可以实现了,每一位都可以为0或者1,0为false,1为true,true和false决定接受与否,如果多加一个或多个属性,无非前面的二进制的一堆0的某一位换个1而已。

    这样只要在数据库里添加一个字段 emialType,类型为integer

    主要是怎么利用位运算进行操作了

    1.获取,怎么利用获取出来的整数来确定各个属性

         比如取出来的值为12,二进制位1100,也就是4个属性分别为 false,false,true,true。问题是怎么用代码(位运算)

    那我们来看第一个属性的值 = 1100 位与 0001 值为 0000 与0001比较为false

                          第二个属性的值 = 1100 位与 0010 的值 0000 与0010比较为false

                          第三个属性的值 = 1100 位与 0100 的值 0100 与0100比较为true

                          第四个属性的值 = 1100 位与 1000 的值 1000 与1000比较为true

    也就是第i个属性的值为    

                           (emaiType & (1 << i) == ( 1 << i))

    2. 设置 , 使用位掩码的这几个属性也就是有2个值0 和 1,true和false。

     我们要设置这些属性的话就是把这个值的二进制的对应位取反

    比如设置第二个属性,原值十进制为11, 二进制位 1011,也就是改成1001

    用位运算怎么实现呢,这个实现想了很久,还找到网上又对这个实现进行封装了方法的, 后来发现位运算的异或其实可以直接实现某一位的取反操作。

    原值11   二进制   1011

    第二个属性取反    也就是 用1011 与 1(1 <<1)(0001) 异或就可以了, 异或的规则是同0异1

                               1011

                              ^  0001

                             == 1010   刚好取反

    再比如第三位取反

                                 1011

                               ^ 0100 (1 <<2 )

                             == 1111

    我们来分析这个异或的实现,实现某一位的取反就是1 移位到这一位,也就是二进制这一位为1,其他位位0

    开始分析,其他位:   用0去异或,如果原值为1,不同为1,原值不变,如果原值为0,相同为0,原值不变,也就是其他位保持不变。

    要修改的位:   用1去异或,如果原值为1,相同为0 , 原值改变 ,如果原值为0, 不同为1,原值改变,可见用异或可以实现指定位的取反。

    第i个属性的修改为:

                                                                              emaiType ^ ( 1 << i)

    默认值的设置,这里是4个属性,设置了15,可是如果以后属性添加的话又得需要改了,高人提供的方法,设置 -1, -1的二进制全是1☺你们懂得

           至此,问题全部搞定,具体使用读者还需细细体会。
     

     

    展开全文
  • Go的位操作

    千次阅读 2018-03-07 12:30:24
    Go的位操作在计算机内存和处理能力都成本昂贵的时代,位操作是(在某些情况下是唯一的)一种被优先选择来处理信息的方式。即使在今天,直接的位操作在一些情况下同样也很重要。例如:低级系统编程,图像处理,密码学...

    Go的位操作

    在计算机内存和处理能力都成本昂贵的时代,位操作是(在某些情况下是唯一的)一种被优先选择来处理信息的方式。即使在今天,直接的位操作在一些情况下同样也很重要。例如:低级系统编程,图像处理,密码学等。
    Go编程语言支持以下几种位操作,包括:

    &位与
    |位或
    ^位异或
    &^位清空
    <<左移
    >>右移

    文章后面的部分将详细讨论每一种操作,以及举例说明它们如何使用。

    &运算

    在Go中,&操作表示两个整数按位AND运算。AND操作具有如下特性:

    Given operands a,b
    AND(a,b)=1;only if a=b=1
               else=0

    AND操作可以有效的清除值为0的数位,例如,我们可以使用&操作来清除最后4个最低有效位(LSB),使其为0。

    func main(){
        var x uint8=0xAC   //x=10101100
        x=x&0xF0           //x=10100000
    }

    所有的二进制操作都支持简短的复合赋值形式。例如上面的例子可以改写成:

    func main(){
        var x uint8=0xAC   //x=10101100
        x&=0xF0            //x=10100000
    }

    另外一个小技巧就是用&操作来检测一个数是奇数还是偶数。这是因为奇数的最低有效位为1,而偶数的最低有效位为0。因此我们可以利用整数和数字1进行“与”运算,就可判断该数的奇偶性。

    import (
        "fmt"
        "math/rand"
    )
    
    func main(){
        for x:=0;x<100;x++{
            num:=rand.Int()
            if num&1==1{
                fmt.Printf("%d is odd\n",num)
            }else{
                fmt.Printf("%d is even\n",num)
            }
        }
    }

    | 运算

    |表示两个整数按位OROR操作具有如下特点。

    Given operands a,b
    OR(a,b)=1;when a=1 or b=1
              else=0

    我们可以使用OR操作来有选择的设置给定整数的某个位。例如下面的例子,我们使用OR了设置MSB(最高有效位),第7位和第三位的值为1。

    func main(){
        var a uint8=0
        a|=196
        fmt.Printf("%b",a)
    }

    使用位掩码技术对一个给定的整数值任意位设置时,OR相当有用。例如,我们可以扩展之前的程序。下面的程序使用十进制的196和3来设置对应位。

    func main(){
        var a uint8=0
        a|=196
        a|=3
        fmt.Printf("%b",a)
    }

    位作为配置信息

    我们可以结合ORAND两种操作符,作为指定配置值和分别读取它们的一种方法。下面的源代码简要的说明如何使用。函数procstr转化string类型的内容,它需要两个参数:第一个参数str表示待转换的字符串,第二个参数conf,是个整数。用来指定多个转化配置。

    const (
        UPPER = 1
        LOWER = 2
        CAP   = 4 //首字母大写
        REV   = 8 //颠倒顺序
    )
    
    func main() {
        fmt.Println(procstr("HELLO PEOPLE!", LOWER|REV|CAP))
    }
    
    func procstr(str string, conf byte) string {
        //reverse string
        rev := func(s string) string {
            runes := []rune(s)
            n := len(runes)
            for i := 0; i < n/2; i++ {
                runes[i], runes[n-1-i] = runes[n-1-i], runes[i]
            }
            return string(runes)
        }
    
        //query config bits
        if (conf & UPPER) != 0 {
            str = strings.ToUpper(str)
        }
        if (conf & LOWER) != 0 {
            str = strings.ToLower(str)
        }
        if (conf & CAP) != 0 {
            str = strings.Title(str)
        }
        if (conf & REV) != 0 {
            str = rev(str)
        }
        return str
    }

    上面主函数中调用方法procstr(“HELLO PEOPLE”,LOWER|REV|CAP),将会把字符串“HELLO PEOPLE”转化为小写,单词首字母大写,然后颠倒字符串前后顺序。此时参数conf的值为14,它的第二,第三和第四位设置了转化的这些条件。然后,代码使用连续的if语句块来提取这些配置,并对字符串应用对应的字符串转化。

    ^操作

    Go中用^表示XOR,它具有以下属性:

    Given operands a,b
    XOR(a,b)=1;only if a!=b
               else=0

    异或定义的含义是它可以将一个值切换到另一个。例如,给定的16位值,我们可以使用下面代码切换前8位(从最高有效位开始)。

    func main(){
        var a uint16=0xCEFF
        a^=0xFF00    //same a=a^0xFF00
    }
    
    // a = 0xCEFF   (11001110 11111111)
    // a ^=0xFF00   (00110001 11111111)

    XOR的一个实际用途就是判定符号,(a^b)>=0判定两个数的符号是否相同。

    func main(){
        a,b:=-12,25
        fmt.Println("a and b have same sign?",(a^b)>=0)
    }
    
    /*prints:
    a and b have same sign? false */

    ^作为按位补码(NOT)

    与其他语言不同(c/c++,Java,Python,Javascript等),Go没有一个专门的一元补码操作符来对值取反,代替的是XOR操作符。

    func main(){
        var a byte=0x0F
        fmt.Printf("%08b\n",a)
        fmt.Printf("%08b\n",^a)
    }
    
    /* prints:
    00001111  //var a
    11110000  //^a

    &^操作

    &^操作,也称AND NOT,它是一个使用ANDNOT的简写形式,具有以下特征:

    Given operands a,b
    AND_NOT(a,b)=AND(a,NOT(b))

    它有一个有趣的特性,那就是当第二个数设置为1,它就会清除第一个数。

    AND_NOT(a,1)=0;clears a
    AND_NOT(a,0)=a;

    下面的代码使用AND NOT操作来清除变量a的四个最低有效位。

    func main(){
        var a byte=0xAB
        fmt.Printf("%08b\n",a)
        a &^=0x0F
        fmt.Printf("%08b\n",a)
    }
    
    /* prints:
    10101011
    10100000 */

    <<和>>操作

    类似于其他c派生语言,Go使用<<>>来分别代表左移和右移操作。具体特点如下:

    Given integer operands a and n,
    a<<n;shifts all bits in a to the left n times
    a>>n;shifts all bits in a to the right n times

    例如下面的例子中将a的值左移了三次,每次都将其移动的结果打印出来说明他的用途。

    func main(){
        var a int8=3
        fmt.Printf("%08b\n",a)
        fmt.Printf("%08b\n",a<<1)
        fmt.Printf("%08b\n",a<<2)
        fmt.Printf("%08b\n",a<<3)
    }
    
    /*prints:
    00000011
    00000110
    00001100
    00011000 */

    记住每次移动,最低有效位用0填充,相反的,使用右移操作位时,最高有效位用0填充。(但是有符号位有些区别,详见文章后面的算数移位)

    func main(){
        var a int8=120
        fmt.Printf("%08b\n",a)
        fmt.Printf("%08b\n",a>>1)
        fmt.Printf("%08b\n",a>>2)
        fmt.Printf("%08b\n",a>>3)
    }
    
    /*prints:
    01111000
    00111100
    00011110
    00001111 */

    左移和右移操作的小技巧是可以在乘除法用算时,每次操作表示对原数进行乘以2或除以2例如下面将200右移一位,表示将其除以2。

    func main(){
        a:=200
        fmt.Printf("%d\n",a>>1)
    }
    
    /*prints:
    100 */

    或者用左移2位,表示乘以4。例如

    func main(){
        a:=12
        fmt.Printf("%d\n",a<<2)
    }
    
    /* prints:
    48 */

    位移操作给我们提供了一种有趣的方式来操作二进制值的指定位。例如下面的例子中用|<<操作来设置变量a的第三位。

    func main(){
        var a int8=8
        fmt.Printf("%08b\n",a)
        a=a|(1<<2)
        fmt.Printf("%08b\n",a)
    }
    
    /*prints:
    00001000
    00001100 */

    或者你可以将其与&操作结合起来,测试第n位的值是否被设置。

    func main(){
        var a int8=12
        if a&(1<<2)!={
            fmt.Println("take action")
        }
    }
    
    /* prints:
    take action */

    利用&^和移位操作,我们将第n位的值不设置。例如下面的例子将变量a的第3位没有设置。

    func main(){
        var a int8=13
        fmt.Printf("%04b\n",a)
        a=a&^(1<<2)
        fmt.Printf("%04b\n",a)
    }
    
    /* prints:
    1101
    1001 */

    算数移位

    当一个有符号值(左移)移位时,Go自动使用算数移位。在右移操作中,符号位被拷贝(或者扩展)来填充移动的位置。

    结论

    与其他现代语言一样,Go也支持所有的位操作。这篇文章仅仅提供了一些有关位操作的简单例子。你可以在由Sean Eron Anderson写的Bit Twiddling Hacks文章中发掘更多诀窍。

    展开全文
  • 位操作基础篇之位操作全面总结

    万次阅读 多人点赞 2012-03-19 09:34:08
    Title: 位操作基础篇之位操作全面总结Author: MoreWindowsE-mail: morewindows@126.comKeyWord: C/C++ 位操作 位操作技巧 判断奇偶 交换两数 变换符号 求绝对值 位操作压缩空间 筛素数 位操作趣味应用 位操作...
  • C语言位操作宏定义函数

    万次阅读 2021-06-18 15:48:54
    位操作宏定义 我们在写C语言时,经常需要用到位操作,但是每次自己使用逻辑运算符进行操作的时候,很费脑子,试试下面几个宏定义吧: #define GET_BIT(value,bit) ((value)&(1<<(bit))) //读取指定位 #...
  • stm32位操作详解

    千次阅读 2019-04-11 21:54:00
    stm32位操作详解 STM32位操作原理 思想:把一个比特分成32位,每位都分配一个地址,这样就有32个地址,通过地址直接访问。 位操作基础 位运算 位运算的运算分量只能是整型或字符型数据,...
  • 官方提供的最新Go语言安装包go1.5.3.windows-amd64.msi,大小约69MB。Go语言在Windows平台下的安装参考博客http://blog.csdn.net/defonds/article/details/50538077。
  • 位操作指令

    千次阅读 2019-02-26 20:42:10
     位操作指令 位操作类指令 位操作又称为布尔操作,是以位为单位进行的各种操作。在布尔处理机中,借用进位标志Cy来存放逻辑运算结果,大部分操作都涉及Cy,因此它相当于布尔处理机的“累加器”,称为位累加器,...
  • kotlin位操作和位运算

    千次阅读 2020-06-18 11:22:12
    一、位操作: shl(bits) – 左移位 (Java’s <<) shr(bits) – 右移位 (Java’s >>) ushr(bits) – 无符号右移位 (Java’s >>>) and(bits) – 与 & or(bits) – 或 || xor(bits) – 异或 ...
  • 8位、16位、32位操作系统的区别

    万次阅读 多人点赞 2018-05-20 19:29:51
    简单的说32的CPU的数据线、地址线、控制线都是32的,即CPU一次能够传送、处理32的二进制数,所以理论上它能够寻址的范围是2的32次方,即4个GB,所以即使你的电脑能够安装8个GB的内存,系统也只能使用前4个GB的...
  • C语言的位操作方法

    千次阅读 2019-02-22 16:44:50
    嵌入式里面经常用,面试题里面也经常出现: 1、对某位置1,即赋值为1 ...//括号内 1左移5:0010 0000,按取反:1101 1111,即把a 的第6(bit5)清0,其他不变 3、将变量的第6(bit5)取反,...
  • 位操作符&(按位与)

    万次阅读 2018-11-23 10:13:40
    位操作符&amp;(按位与)  
  • 在64位操作系统上运行32位的程序

    千次阅读 2019-04-19 10:03:26
    在64位操作系统上运行32位的程序
  • 64位操作系统Access2010数据库ODBC驱动

    热门讨论 2012-12-23 17:27:10
    Windows64位操作系统Access2010数据库ODBC驱动
  • Lua不同版本下的位操作

    千次阅读 2018-07-18 19:48:05
    Lua历经几个大的版本变更,每个版本对应的位操作方式也是略有不同,本文主要记录lua 5.0 版本之后的各种位操作方法。
  • python位操作

    千次阅读 2018-03-08 00:56:25
    1.按左移、右移操作 2.按与&amp; 先转化为2进制,然后按从右向左都为1时取1,反之取0 bin(2)==’0b10’ bin(3)==’0b11’ 2&amp;3==0b10&amp;0b11==’0b10’==2 注意:&amp;用于...
  • 51单片机之位操作指令SETB、CPL等

    万次阅读 多人点赞 2019-05-31 23:51:53
    位操作指令只能对片内RAM可位寻址的空间进行操作; 在片内RAM 字节地址 20H~2FH共计16字节128位,其对应 位地址00H~70H的128位空间地址; 此外特殊功能寄存器(SFR)中有11个可以位寻址共计88位(准确说需要再去除6位,...
  • 位操作---置位(置1)、清除和取反

    千次阅读 多人点赞 2019-05-09 14:55:07
    我们在对寄存器进行编程时,通常需要对寄存器中的某一进行置位或清除操作,但是同时我们又不能影响其它。 所以接下来讲解具体如何对相应进行置位或清除操作。 1、置位 1.1含义 就是将数据的某些设为1。 1.2...
  • 《Cortex-M3权威指南(中文)》第5章 操作   硬件连接 假设跑马灯实验的硬件连接如上图所示,LED0连接PB5,LED1连接PE5。由于在LED的另一端是VCC3.3,所以当PB5或PE5为低电平的时候,LED灯会亮。此时GPIO应...
  • 选择的方法理论指导: 1、首先确认CPU为64cpu,intel cpu应支持EM64T指令集,amd cpu应支持x86-64指令集,确定方法见以下方法一~方法三...查看CPU是否支持64bit操作系统的方法: 方法一、 按住“Alt”键并双击...
  • 位运算&及取位操作

    千次阅读 2017-09-06 10:54:54
    运算 and 在java中用&表示 其单个运算包括四种 System.out.println("1&1:"+(1&1)); System.out.println("1&0:"+(1&0)); System.out.println("0&1:"+(0&1)); System.out.println("0&0:"+(0&0)); 1&1:1 1&0:0 0&
  • 位操作 &、|、~、^、、>>

    万次阅读 2018-11-19 03:27:22
    今天在看Java8的HashMap底层原理的时候看到多处操作二...位操作的定义 现实中的世界在计算机中都是以二进制0和1表示的,它的基数为2,进位规则是:逢二进一,借位规则是:借一当二。数据在计算机中主要是以补码的形...
  • Lua 5.1 位操作(与,或,异或操作)

    万次阅读 2018-11-30 10:42:11
    由于lua5.1不支持位操作,自己写了一个lua的位操作函数,代码如下: 方法1: function Xor(num1,num2) local tmp1 = num1 local tmp2 = num2 local str = "" repeat local s1 = tmp1 % 2 local s2 = tmp...
  • GPIO相关的寄存器有以下10个,这10个寄存器都是32的。 4个配置寄存器:MODER、OTYPER、OSPEEDR、PUPDR 2个数据寄存器:IDR、ODR 1个置位复位寄存器:BSRR 1个锁定寄存器:LCKR (不常用) 2个复用寄存器:...
  • 32位与64位操作系统以及CPU的关系

    千次阅读 2018-11-04 16:19:51
    版权声明:转载请注明出处,共同学习。 ... 32和64的区别: 从硬件看, 1、目前32和64是指CPU的通用寄存器位宽(数据总线的位宽),所以64的CPU数据处理...
  • 与运算符(&amp;amp;) 参加运算的两个数据,按二进制进行“与”运算。 运算规则:0&amp;amp;0=0; 0&amp;amp;1=0; 1&amp;amp;0=0; 1&amp;amp;1=1; 即:两同时为“1”,结果才为...
  • 1,Verilog逻辑操作符 逻辑操作符 功能 A与B的运算 C与D的运算 &amp;&amp; 逻辑与 A&amp;&amp;B= 0 C&amp;...
  •  在32、64系统当中,唯一改变的是指针的长度;在32系统当中是4个字节、64则是8个字节。所谓的32、64,这个指的是寄存器的位宽。 32平台下结果:  64平台下结果:  一、下面几点是值得大家...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,035,186
精华内容 814,074
关键字:

位操作