zoukankan      html  css  js  c++  java
  • 左移右移操作_进制转换与区分

    main(  ){
      char c=040;
      printf(“%o ",c<<1);
    }
    左移一位等于乘以2 得到080 因为是八进制,所以进一 0100 输出按照8进制输出,所以输出100;
    计算机区分:普通数,十进制,前面加0X的是十六进制,前面加0的,是八进制。
    八进制由数字0-7组成表达方式由数字0开头
     
    位运算操作符:
    1、&:位逻辑与
    2、 |:位逻辑或
    3、^:位逻辑异或
    4、~:位逻辑反
    5、>>:右移
    6、<<:左移
     
    位运算是对字节或字中的实际位进行检测、设置或者移位,它只适用于字符型和整数型变量以及它们的变体,对其他数据类型不适用。
    (1)&  逻辑与的运算规则:当进行两个数的逻辑与运算时,先将该两个数化为二进制,然后进行逻辑与运算,当相同位的数只有当双方都为1时,结果才为1,否则为0。
    a=5;
    b=4;
    c=a%b;
    c=4;--------------  a=5=0101  b=4=0100  a&b=0100=4
    (2) | 逻辑或的运算规则:当进行两个数的逻辑或运算时,先将该两个数化为二进制,然后进行逻辑或运算,当相同位的数只要有一方为1,结果就为1,否则为0。
    a=2;b=9;
    c=a|b;  a=2=0010; b=9=1001  c=1011=11
    (3)逻辑异或的运算规则:当进行两个数的逻辑异或运算时,先将该两个数化为二进制,然后进行逻辑异或运算,当相同位的数只有当双方都为不同数字时,结果才为1,否则为0。
    a=6;b=8; c=a^b  ;  a=0110  b=1000; 0110^1000=1110=14;
    (4)逻辑反的运算规则:当进行一个数的逻辑反运算时,先将这个数化为二进制,然后进行逻辑反运算,当数为1时,结果为0,当数为0时结果为1。
    a=12;b=~a:  12=1100;~1100=0011=3

    按照上面的运算规则,我们先将12转换为二进制,为1100,进行位逻辑反运算,则为0011,化为十进制数结果应为3才对啊,那为什么测试的结果是-13呢?
    原来啊,在计算机中,二进制的存储方式是以补码的形式存储的。
    所以,12在计算机内存储的是01100(第一个0位符号位,代表这个数是正数),对其进行逻辑反运算则为10011,但这个二进制只是b这个变量在计算机内的存储形式(即b的补码形式),所以我们需要将其转换为原码形式,由于符号位为1,为负数,所以我们先对10011转换为反码,即11100,再对其进行+1,所以结果为11101,转换为十进制数则为-13。所以b=-13。

    计算机中打印的二进制都是补码的形式

    正数原码、反码、补码 三码合一 

    负数的原码转换为补码为 符号位不变 数值位按位取反 末位加一

    负数,补码的补码等于原码  反码为正 三码合一

    (5)右移操作运算规则:左边空出的位用0或者1填补。正数用0填补,负数用1填补。注:不同的环境填补方式可能不同;低位右移溢出则舍弃该位。

    a=127,转换为二进制为01111111,由于二进制在计算机内部是以补码的形式进行存储,但由于127是正数,所以其补码为01111111,对该补码进行右移操作运算,按照运算规则,得到00011111,转换为原码,依旧为00011111,转换为十进制数为31,所以,b=31。

    对多组数据进行测试,我们可以得到这样一个规律:
    当一个数进行n位的右移操作后,所得到的新的数=被操作数/2^n.
    (6)左移运算操作规则:右边空出的位用0填补,高位左移溢出则舍弃该高位。

    a=-127,转换为二进制为1000 0111 1111,转换为反码为1111 1000 0000,转换为补码是1111 1000 0001,对其进行左移三位的操作,得到:1100 0000 1000,将其转换为反码:1100 0000 0111,再将其转换为原码:1011 1111 1000,转换为十进制数,为-1016,所以b=-1016。
    对多组数据进行测试,我们可以得到这样一个规律:
    当一个数进行n位的左移操作后,所得到的新的数=被操作数*2^n.

  • 相关阅读:
    gorm 更新数据时,0值会被忽略
    xshell评估过期解决办法
    安装zoom
    aria2 加速百度网盘下载
    ubuntu17.10 安装firefox的flash
    c++ 回调函数使用
    ubuntu17 安装中文输入法
    ubuntu python3.6 找不到_sqlite3
    linux 获取CPU个数
    centos7 yum与Python3冲突
  • 原文地址:https://www.cnblogs.com/samanian/p/11391894.html
Copyright © 2011-2022 走看看