精华内容
下载资源
问答
  • 二进制移动
    2020-06-29 22:17:13

    二进制移动

    1、算术左移-逻辑左移

    算​术左移和逻辑左移一样都是右边补0:
     比如: 00101011​ 算术左移一位:01010110 
                    逻辑左移一位​:01010110
    

    对于二进制的数值来说左移n位等于原来的数值乘以2的n次方

     比如:00011010十进制是26,左移两位后是011010​00转成十进制是104恰好是26的4倍。
    

    ps:这种倍数关系只适用于左移后被舍弃的高位不含1的情况,否则会溢出。

    ​2、 算术右移,逻辑右移

    逻辑右移很简单,只要将二进制数整体右移,左边补0即可
     比如:10101101逻辑右移一位为01010110
    
    算术右移符号位要一起移动,并且在左边补上符号位,也就是如果符号位是1就补1符号位是0就补0
     比如:11100算术右移一位为11110(符号位1跟着一起移动并且左边补了1)  
    

    对于二进制的数值来说右移n位等于原来的数值除以2的n次方

    比如10110100十进制是76(需要先将这个补码转换成原码之后再转换成十进制),右移两位后是11101101转成十进制是19恰好是76的4倍。  
    

    3、算数移动逻辑移动的意义

    算术左移和算术右移主要用来进行有符号数的倍增、减半;  
    逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半。
    
    更多相关内容
  • 要求:在32机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 程序结果返回: 2550136832#include<stdio.h> #include&...

    要求:

    在32位机器上25这个值包含下列各位:
    00000000000000000000000000011001
    翻转后:(2550136832)
    10011000000000000000000000000000
    程序结果返回:
    2550136832
    #include<stdio.h>
    #include<stdlib.h>
    unsigned int reverse_bit(unsigned int value)  //定义一个无符号的数
    {
    	
    	int ret = 0;
    	int i;
    	for(i=0;i<32;i++)    //这个数的二进制位的每一位都需要与1与
    	{
    		int r=value & 0x01;  //这个数与1与之后赋给r,就取出来了这个数二进制位的最后一位
    		ret |= r<<(32-i-1);   //   把取出来的二进制位的最后一位向左移31位,下一位取出来的数向左移30位,以此类推,并且把每一次移动后的值加起来,就是最后翻转后的值。
    		value = value >> 1;   //每次的数与1与了之后,它需要向右移再次与1与
    	}
    	return ret; //将这个数返回
    	
    }
    
    int main()
    {
    	int val= 0;
    	printf("请输入一个数字:");
    	scanf("%d",&val);
    	printf("将这个数字位反转后是:%u\n",reverse_bit(val));
    
    	system("pause");
    	return 0;
    }


    展开全文
  • 二进制的左右移位运算

    万次阅读 2017-01-16 20:35:51
    移位运算符:最重要的一点,虽然数字存贮在计算机内存...→移位运算符:符号随着运算移动,当为正数的时候最高补0,为负数的时候符号补1,最高的补位取决于编译器,较多的补1. int i = 1; i = i 也就

    移位运算符:最重要的一点,虽然数字存贮在计算机内存中是以2进制的补码形式,但是运用移位运算符时是对源码进行的。

    ←移位运算符:高位舍弃,低位补0(负数与正数的运算是一样的)

    例:int a=-10,g.   g=a<<4=-160  a:11010(2)→110100000=-160(10)

    →移位运算符:符号位随着运算数的移动,当为正数的时候最高位补0,为负数的时候符号位补1,最高位的补位取决于编译器,较多的补1.

    int i = 1;
    i = i << 2; //把i里的值左移2位
    也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成000... 0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了( 有符号数不完全适用,因为左移有可能导致符号变化,下面解释原因)


    需要注意的一个问题是int类型最左端的符号位和移位移出去的情况.我们知道,int是有符号的整形数,最左端的1位是符号位,即0正1负,那么移位的时候就会出现溢出,例如:
    int i = 0x40000000; //16进制的40000000,为2进制的01000000...0000
    i = i << 1;
    那么,i在左移1位之后就会变成0x80000000,也就是2进制的100000...0000,符号位被置1,其他位全是0,变成了int类型所能表示的最小值,32位的int这个值是-2147483648,溢出.如果再接着把i左移1位会出现什么情况呢?在C语言中采用了丢弃最高位的处理方法,丢弃了1之后,i的值变成了0.


    左移里一个比较特殊的情况是当左移的位数超过该数值类型的最大位数时, 编译器会用左移的位数去模类型的最大位数,然后按余数进行移位,如:
    int i = 1, j = 0x80000000; //设int为32位
    i = i << 33; // 33 % 32 = 1 左移1位,i变成2
    j = j << 33; // 33 % 32 = 1 左移1位,j变成0,最高位被丢弃
    在用 gcc编译这段程序的时候 编译器会给出一个warning,说左移位数>=类型长度.那么实际上i,j移动的就是1位,也就是33%32后的余数.在gcc下是这个规则,别的编译器是不是都一样现在还不清楚.
    总之左移就是: 丢弃最高位,0补最低位
    再说右移,明白了左移的道理,那么右移就比较好理解了.
    右移的概念和左移相反,就是往右边挪动若干位,运算符是>>.
    右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:
    int i = 0x80000000;
    i = i >> 1; //i的值不会变成0x40000000,而会变成0xc0000000
    就是说,符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.
    负数10100110 >>5(假设 字长为8位),则得到的是 11111101
    总之,在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多.
    在很多系统程序中常要求在位(bit)一级进行运算或处理。C语言提供了 位运算的功能,这使得C语言也能像汇编语言一样用来编写系统程序。
    (引用部分内容)。


    
    展开全文
  • 8位二进制数的表示范围为[-127,127]; 反码:正数数值部分是数值本身,符号为0;负数的数值部分是在正数表示的基础上对各个取反,符号位位1。 8位二进制数的表示范围为[-127,127]; 补码:正数数值部分是数值...

    1、原码,反码,补码

         概念

    • 原码:符号位和数字实际值的结合。正数数值部分是数值本身,符号位为0;负数数值部分是数值本身,符号位为1。

             8位二进制数的表示范围为[-127,127];

    • 反码:正数数值部分是数值本身,符号位为0;负数的数值部分是在正数表示的基础上对各个位取反,符号位位1。

             8位二进制数的表示范围为[-127,127];

    • 补码:正数数值部分是数值本身,符号位为0;负数的数值部分是在正数表示的基础上对各个位取反后加1,符号位为1。

             8位二进制数的表示范围为[-128,127];

          问题

       1、+0,-0的原码,反码,补码分别是什么?

           

    +0,-0的原码,反码,补码
    +0-0
    原码0|00000001|0000000
    反码0|00000001|11111111
    补码0|00000000|0000000

    正数的原码,反码,补码均为数值本身,由此+0的反码和补码都为其原码;

    -0原码为1|0000000,其反码按规定为符号位不变,其余各位取反1|1111111,补码为反码+1,即10|0000000,发生溢出,舍弃溢出的1得到0|0000000。得到上述结果。

    n位有符号二进制数数值范围公式

    原码和反码-2^(n-1)-1~2^(n-1)-1

    补码-2^(n-1)~2^(n-1)-1

    2、位移运算

    2.1、有符号位移运算

          十进制的奇数转化为二进制数之后,在向右移的过程中,最右边的1将被直接抹去,说明向右移对于奇数并非完全相当于除以2。在左移<<和右移>>两种运算中,符号位均参与移动,除负数往右移动,高位补1之外,其他情况均在空位处补0。

    表格中二进制数均为原码的补码,因为计算机中的二进制运算都使用补码进行
    8/0|000100035/0|0100011-35/1|1011101
    右移一位4/0|000010017/0|0010001-18/1|1101110
    右移两位2/0|00000108/0|0001000-9/1|1110111
    左移一位16/0|001000070/0|1000110-70/1|0111001
    左移两位32/0|0100000-12/1|0001100114/0|1110010

    2.2、无符号位移运算

        无符号位移运算,符号表示为">>>"。该运算不存在向左移动的方式。当向右移动时,正负数高位均补零,正数向右移动的最小值为0,而负数不断向右移动的最小值为1。可自行论证。

        位移运算仅作用于整形(32位)和长整形(64位)数上,假如在整形数上移动的位数是字长的整数倍,无论是否带符号位及移动方向,均为本身。因为移动的位数是一个mod32的结果,即35>>1和35>>33是一样的结果。如果为长整形,mod64,即35<<1和35<<65的结果是一样的。负数在无符号往右移动63位时,除最右边为1,左边均为0,达到最小值1,如果>>64,则为其原数值本身。

    public class test {
        public static void main(String[] args) {
            int i=35;
            System.out.println(i>>1);
            System.out.println(i>>33);
            long j=35l;
            System.out.println(j<<1);
            System.out.println(j<<65);
    
            long k=-35l;
            System.out.println(k>>63);
            System.out.println(k>>64);
        }
    }

    3、位运算

        位运算包括按位取反(~)、按位与(&)、按位或(|)、按位异或(^)等运算。如下

    public class test {
        public static void main(String[] args) {
            //java中二进制以0b或0B开头
            //a和b为二进制数的00000001
            int a=0b0001;
            int b=0B01;
            System.out.println(a&b);
            System.out.println(a|b);
            //按位异或可以理解为相同为0,相异为1
            //即0^0=0,1^1=0,1^0=1
            System.out.println(a^b);
    
        }
    }

     

        按位与和逻辑与(&&)运算都可以作用于条件表达式,但是后者有短路功能,表达如下:

    boolean a=true;
    boolean b=true;
    boolean c=(a=(1=2))&&(b=(1==2));

         因为&&前边的条件表达式,即如上的红色代码部分结果为false,触发短路,直接退出,最后a的值为false,b的值为true。假如把&&修改为按位与&,则执行后a和b的值均为false。

         同样的,按位或对应的逻辑或运算(||)也具有短路功能,如下:

    boolean e=false;
    boolean f=false;
    boolean g=(e=(1=1)||(f=(1=1));

         最后e的值为true,f的值为false。假如把||修改为按位或符号|,执行的结果为e和f都为true。

    展开全文
  • 二进制右移问题

    2020-01-08 21:27:05
    000…(31个0)1 这个二进制数右移24位变成 0000…(23个0)1(8个0),因为这个右移一位变成1000…(31个0),最右边的1变到最左边。 还有注意一个问题:CPU可以直接控制自己的内存器,但是对于引脚等外部寄存器...
  • 计算机中的二进制小数

    千次阅读 2021-07-26 00:17:49
    前言理解浮点数的第步是考虑含有小数值的二进制数字十进制小数首先看一下十进制的小数的表示,举例十进制:12.3412.34 === 1 * 101 + 2 * 100 + 3 * 10-1 + 4 * 10-2 === 12二进制小数类比十进制小数表示形式...
  • 如题:输入个整数,截取它对应的二进制位中从右到的第8-11(最右边为第0)。**输入格式要求:"%d" 提示信息:"请输入个整数:"**输出格式要求:"它的从右开始的第11-8为:\n" "%d "程序运行示例如下:请输入...
  • 为什么二进制左移一位相当于乘以2

    万次阅读 2020-02-06 10:16:15
    左移一位是0001 0000 0110,最高位不能去掉的,仔细想一下,原理很简单的,就比如一个十进制的,例如2,左移一位,后面补0,就是20,,相当于乘以10,二进制的左移相当于乘以2,右移相当于除以2 ...
  • 二进制位运算---左移右移

    千次阅读 2019-11-11 22:03:47
    原码:个整数按照绝对值的大小转化成二进制 反码:将二进制数取反 补码:反码加 1 以-14 举例 原码:14 即 00000000 00000000 00000000 00001110 反码: 11111111 11111111 11111111 1...
  • 详解计算机内部存储数据的形式—二进制数 前言 要想对程序的运行机制形成个大致印象,就要了解信息(数据)在计算机内部是以怎样的形式来表现的,又是以怎样的方法进行运算的。在 C 和 Java 等高级语言编写的 程序...
  • 有符号二进制数右移

    千次阅读 2019-02-22 19:16:50
    二进制数右移N,规则为: 除符号外,全部右移N, 如果数字是个无符号数值,则用0填补最左边的N, 如果数字是个有符号数值,则用1填补最左边的N, 也就是说如果数字原先是个正数,则右移之后在...
  • 二进制中原码补码与左移右移
  • 数据是用二进制数表示的

    千次阅读 2021-05-22 06:50:10
    8种机械键盘轴体对比本人程序员,要买个写代码的键盘,请问...将二进制数的各数位的值和权相乘后再相加, 即可转换成为十进制.92二进制数00001111左移两后, 会变成原的几倍?4倍二进制数左移1后会变成原...
  • 详解计算机内部存储数据的形式—二进制数 前言 要想对程序的运行机制形成个大致印象,就要了解信息(数据)在计算机内部是以怎样的形式来...、用二进制数表示计算机信息的原因 计算机内部是由  IC(集成电路( Int
  • 的最高的二进制位(java)

    千次阅读 2020-04-29 18:13:34
    假设第i位为1,1~i-1位 为0,i+1~最后一位 为0或1,表示为x. 思路: 1)0000 0000 01xx xxxx 变成 0000 0000 0111 1111 2)用0000 0000 0111 1111 - 0000 0000 0011 1111,结果=0000 0000 0100 0000 ...
  • 二进制位运算 左移与右移

    千次阅读 2019-08-03 20:11:59
    原码:个整数按照绝对值的大小转化成二进制 反码:将二进制数取反 补码:反码加 1 以-14 举例 原码:14 即 00000000 00000000 00000000 00001110 反码: 11111111 11111111 11111111 11110001 补码...
  • 二进制数 的操作

    千次阅读 2019-05-23 17:52:16
    题目:获取数二进制序列中所有的偶数和奇数,分别输出二进制序列 这里,我运用最笨或者说最直接的做法,用两个数组分别存储奇数位和偶数,然后循环,若当前为第奇数次循环,将该最低存入奇数数组,同理...
  • 概述 二进制位运算符用于直接对二进制位进行计算,一共有7个... 二进制否运算符(not):符号为~,表示对二进制位取反。 异或运算符(xor):符号为^,表示若两个二进制位不相同,则结果为1,否则为0。 左移...
  • 二进制运算

    千次阅读 2019-03-15 20:03:26
    所有编程语言都是种人和计算机之间的翻译工具,人的数组语言翻译成二进制给计算机读取,然后把计算机的二进制数据翻译成人类的语言呈现出来。 16进制 16进制用于缩写(简写)2进制,将2进制从后向前 每4位数转换...
  • 二进制是计算技术中广泛采用的种数制。...它对整型参数的每二进制位进行布尔与操作,即两个对应的二进制位同时为1时,才等于1。 2、操作符“|” 定义:称为按或运算符。它对整型参数的每二进制位进行
  • 二进制位运算

    万次阅读 2017-12-03 20:00:01
    运算基础 运算(包括与,或,取反,异或,左移,右移等)是程序设计中的个重要的领域。尤其是安全和底层开发中,除了指针的频繁使用之外,运算是另个非常频繁使用的领域。 因此,在求职面试中,...
  • 简单理解二进制的左移和右移(通俗易懂)

    万次阅读 多人点赞 2020-08-11 09:48:02
    左移(<<) 符号表示 : << 简单理解:二进制左移几位就是后面加几个0,前面去掉几位 举例说明: 39左移两位 ...简单理解:和左移同理...左移一位相当于乘2,右移一位相当于除2(不完全等同),比除法快 ...
  • 二进制计算

    千次阅读 2021-07-21 05:31:49
    虽然很早就接触了二进制,却一直没有正视这个问题,阅读《计算机科学导论》的时候,基本上是跳过了这部分,总是以“这么基础的东西,反正工作中基本用不上”的理由给搪塞过去。最近正在阅读《编码》和《程序员的...
  • 2、二进制

    2021-07-26 08:01:22
    IC是集成电路的简称,集成引脚电路只有0和5V使用二进制可以更好的控制电脑里面的电路位:位(bit,缩写为b)是存储器的最小单位,可以表示一位二进制数.字节:1字节(Byte,缩写为B)由8个位组成,即1Byte=8bit,是...
  • 二进制图文详解

    2017-09-11 14:18:47
    将2进制数位位向左移动,右侧填充0 拼接int d1 = 00000000 00000000 00000000 11101010 d2 = 00000000 00000000 00000000 01010001 d3 = 00000000 00000000 00000000 11010111 d4 = 00000000 00000000 ...
  • 计算机中二进制的移位运算

    万次阅读 2019-02-21 14:04:19
    :左移 左移是将二进制操作对象按指定的移动位数左移,左边溢出的位数被丢弃,右边的空位用0补充。左移相当于乘以2的幂次。∫将个运算对象的各二进制位,全部左移若干(左边的二进制丢弃,右边补0) ...
  • 二进制和十进制的转换and运算

    千次阅读 2021-01-30 11:02:13
    1.将二进制数转换成十进制 转换规则: 展开权进行求和运算 100110 1x2^5+0x2^4+0x2^3+1x2^2+1x2^1+0x2^0 1x32+0x16+0x8+1x4+1x2+0x1 32+0+0+4+2+0 结果=38 2.将十进制转换为二进制 转换规则:除2取余直至运算结果...
  • 二进制的左右翻转。

    千次阅读 2019-01-22 22:28:13
    这个函数的返回值value的二进制位模式从到右翻转后的值。 在32机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 程序结果返回:...
  • 二进制+操作 总结

    千次阅读 2018-08-13 11:48:31
    扒了几篇博文,都是一些不符合需求的,对于个数学渣渣来说,说的太简洁是会要命的,自己总结一下我碰到过的二进制。 参考资料:https://jingyan.baidu.com/article/1612d5008ff5b7e20f1eee4c.html 运算(...
  • 将一个整数的二进制的奇位和偶数位交换 #define _CRT_SECURE_NO_WARNINGS 1 // 1. 取出奇数或者偶数 按位与 0101010类似的数据 //...之后的数据 向左移动一位 就得到了偶数位 // (num&am...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,363
精华内容 26,145
关键字:

二进制数向左移动一位