精华内容
下载资源
问答
  • C51和C语言的左移与右移

    千次阅读 2020-03-16 21:19:49
    C51中左移右移有两种方式 一:(其实应该叫循环左移和循环右移) “_crol_(移动对象,左移的位数)"是左移函数,操作效果是:向左移动,最高位移动到最低位。 例如: 1110左移一位? _crol_(1110,1);——移动后是...

    C51中左移右移有两种方式

    :(其实应该叫循环左移和循环右移)

    “_crol_(移动对象,左移的位数)"是左移函数,操作效果是:向左移动,最高位移动到最低位。

    例如:

    1110左移一位? _crol_(1110,1);——移动后是1101,最高位的1移动到了最低位。

    二:(其实应该叫逻辑左移和逻辑右移)

    例如:使用的是1110<<1语句,移动之后是1100,最低位补0.

     

    C语言中的(其实应该叫算数左移和算数右移)

    例如:5<<3=40,其实就是101<<3 = 101000 = 2^5+2^3 = 40

     

    逻辑左移时,最高位丢失,最低位补0;

    逻辑右移时,最高位补0,最低位丢失;

    算术左移时,依次左移一位,尾部补0,最高的符号位保持不变。

    算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上复制一个符号位;

    循环左移时,将最高位重新放置最低位

    循环右移时,将最低位重新放置最高位

    使用循环操作的一个目的就是把每一位连续放到最左边,以判定数据的符号。如果要把一个数字的高位部分和低位部分互换,采用一位操作就很方便,速度很快。
     

    展开全文
  • 汇编语言/C51/C语言/C++左移、右移>>的不同

    万次阅读 多人点赞 2013-04-15 12:56:39
    汇编: 1.对于51单片机:RLC A;即将累加器ACC内容左移1位,最低位被CY原始值替代,最高位移入进位标志CY ...(1)左移:SHL/SAL DST CNT 移位时操作数的最低位将移入0,最高位移入CF,若左移若干位
    汇编:
    1.对于51单片机:RLC A;即将累加器ACC中内容左移1位,最低位被CY原始值替代,最高位移入进位标志CY
      中,同理还有RRC A。
      具体使用:MOV A,#0FFH;
              CLR C;
              RLC A;

    2.对于8086:

    (1)左移:SHL/SAL DST CNT 移位时操作数的最低位将移入0,最高位移入CF中,若左移若干位,则CF中只保留最后一次移出的内容。

    (2) 右移:分为逻辑右移与算术右移。逻辑右移即SHR,用法与SHL同;算术右移即SAR,移位时操作数的最高位移入的是它原来的值,即最高位保持不变,最低位同样移入CF,主要用于带符号数的右移。

    (3)循环移位:ROR/ROL/RCR/RCL DST CNT 类似51的移位指令,不过可以一次操作多位移动。


    C51:

    1.在C51中操作符为"<<",每执行一次左移指令,操作数最高位移入CY,CY中本来的数丢失,最低位补0,其他位依次向左移动1位。右移指令类同。
    2.循环左移:使用C51库函数自带的 unsigned char _crol_(unsigned char c,unsigned b);实现将字符C循环左移b位,跟8086汇编的循环移位类同,同样右移函数为_cror_;


    标准C:

    1.">>",C语言中的右移运算,一般情况下是高位补零,但在处理有符号数的时候会因计算机系统的不同而不同。有符号数高位是零,则右移时高位补零;如果是负数即高位是1,那么有的系统会移入1(移动几位就补几个1),称算术右移(大部分系统),有的会移入0,称逻辑右移。

    2."<<",C语言中的左移运算,无论是有符号数还是无符号数都是按照逻辑左移来操作,即向左移动若干位,低位补0即可。


    C++:

    ">>"和"<<"运算符如果没有被重载的情况下使用与标准C相同,如果被重载如输入输出流的操作,则变成输入输出操作符,如cout<<xxx; cin>>yyy; 当然也可以被重载为其他的操作。


    展开全文
  • C51中intrins_h头文件解释分析

    千次阅读 2019-04-28 20:16:41
    这是关于C51中使用循环移位等函数的头文件定义的分析

    摘要

    这是关于C51中使用循环移位等函数的头文件定义的分析

    源代码

    /*--------------------------------------------------------------------------
    INTRINS.H
    Intrinsic functions for C51.
    Copyright (c) 1988-2004 Keil Elektronik GmbH and Keil Software, Inc.
    All rights reserved.
    --------------------------------------------------------------------------*/
    #ifndef __INTRINS_H__  //条件编译,未定义则编译,到#endif之间都是程序段
    #define __INTRINS_H__  //使别的条件编译知道__INTRINS_H__已经定义
    
    //空操作(相当于8051 NOP 指令PC=PC+1)
    //NOP
    extern 	void   _nop_(void); 
    
    //测试并清零位(相当于8051 JBC 指令)
    //JBC bit, rel
    //若(bit) = 1, 则PC ← (PC)+3+rel, bit←0 
    //若(bit) = 0, 则PC ← (PC)+3
    extern  bit  _testbit_(bit);  
    
    //字符 循环 右移,低位补高位
    extern unsigned char _cror_(unsigned char, unsigned char);  
    
    //整数 循环 右移,低位补高位
    extern unsigned int  _iror_(unsigned int,  unsigned char);  
    
    //长整数 循环 右移,低位补高位
    //RR  A
    extern unsigned long _lror_(unsigned long, unsigned char);	  
    
    //字符 循环 左移,高位补低位
    extern unsigned char _crol_(unsigned char, unsigned char);	 
    
    //整数 循环 左移, 高位补低位
    extern unsigned int  _irol_(unsigned int,  unsigned char);  
    
    //长整数 循环 左移, 高位补低位
    //RL  A
    extern unsigned long _lrol_(unsigned long, unsigned char);	 
    
    //测试并返回源点数状态,就是汇编中的子函数�
    extern unsigned char _chkfloat_(float);  
    
    //特殊功能寄存器 入栈
    extern void    _push_(unsigned char _sfr);   
    
    //特殊功能寄存器 出栈
    extern void    _pop_(unsigned char _sfr);   
    
    #endif
    
    

    说明

    • extern作用是声明这是外部函数,定义是在别的地方进行的。
    • 或者说这是C语言嵌入汇编语言中声明引用了汇编语言子程序;

    举个栗子

    //举个例子
    #include
    #include
     
    #define uint unsigned int
    #define uchar unsigned char
     
    void delay(uchar);
     
    uchar temp;
     
    void main()
    {
        temp = 0xfe;
        while(1)
        {
            P1 = temp;
            delay(100);
            temp = _crol_(temp,1);
        }
    }
     
    void delay(uchar time)
    {
        uchar i,j;
        for(i = time;i > 0;--i)
            for(j = 110;j > 0;--j);
    }
    
    展开全文
  • _crol_,_cror_:如果二进制数为 01010101 那么_crol_(1) 左移 1 位后将高位补低位。 结果 10101010。 功 能: _crol_, _irol_, _lrol_以位形式将 val 左移 n 位,该函数与 8051“ RLA”指令相关,...

    KEIL 中 头文件 INTRINS.H的作用 在 C51 单片机编程中,头文件 INTRINS.H 的函数使用起来,
    就会让你像在用汇编时一样简便.
    内部函数 描述
    _crol_ 字符循环左移
    _cror_ 字符循环右移
    _irol_ 整数循环左移
    _iror_ 整数循环右移
    _lrol_ 长整数循环左移
    _lror_ 长整数循环右移
    _nop_ 空操作 8051 NOP 指令
    _testbit_ 测试并清零位 8051 JBC 指令
    函数名: _crol_, _irol_, _lrol_
    原 型: unsigned char _crol_(unsigned char val,unsigned char n);
    unsigned int _irol_(unsigned int val,unsigned char n);
    unsigned int _lrol_(unsigned int val,unsigned char n);
    举例:
    _crol_,_cror_:将 char 型变量循环向左(右)移动指定位数后返回
    _testbit_: 相当于 JBC bitvar 测试该位变量并跳转同时清除。
    _chkfloat_: 测试并返回源点数状态。
    就是汇编中的子函数。
    _crol_,_cror_:如果二进制数为 01010101 那么_crol_(1) 左移 1 位后将高位补低位。
    结果 10101010。
    功 能: _crol_, _irol_, _lrol_以位形式将 val 左移 n 位,该函数与 8051“ RLA”指令相关,
    上面几个函数不同于参数类型。
    例:
    #include <intrins.h>
    main()
    {
    unsigned int y;
    C-5 1 程序设计 37
    y=0x00ff;
    y=_irol_(y,4);
    }
    函数名: _cror_, _iror_, _lror_
    原 型: unsigned char _cror_(unsigned char val,unsigned char n);

    unsigned int _iror_(unsigned int val,unsigned char n);
    unsigned int _lror_(unsigned int val,unsigned char n);
    功 能: _cror_, _iror_, _lror_以位形式将 val 右移 n 位,该函数与 8051“ RRA”指令相关,
    上面几个函数不同于参数类型。
    例:
    #include <intrins.h>
    main()
    {
    unsigned int y;
    y=0x0ff00;
    y=_iror_(y,4);
    }
    函数名: _nop_
    原 型: void _nop_(void);
    功 能: _nop_产生一个 NOP 指令,该函数可用作 C 程序的时间比较。 C51 编译器在_nop_
    函数工作期间不产生函数调用,即在程序中直接执行了 NOP 指令。
    例:
    P()=1;
    _nop_();
    P()=0;
    在 12M 的晶振下每个_nop_()延时 11us,经过适当的调整即可做到精确延时。
    函数名: _testbit_
    原 型: bit _testbit_(bit x);
    功 能: _testbit_产生一个 JBC 指令,该函数测试一个位,当置位时返回 1,否则返回 0。如
    果该位置为 1,则将该位复位为 0。 8051 的 JBC 指令即用作此目的。 _testbit_只能用于可直
    接寻址的位;在表达式中使用是不允许的

    展开全文
  • C51入门之跑马灯

    千次阅读 多人点赞 2019-10-12 22:34:15
    注意:实现产品软件开发,不建议使用硬延时,使用硬延时会降低产品的实时性 实现方法: 1. 写一个函数,带一个形参,延时值由其传入函数 2.函数体内由2级for循环组成 3.由分号语句实现空等待操作 ...
  • 而”:“和” “的ASCII值恰好是0x3a,0x20,看来这几个汉字是叛变到西文字符去了,机内码只有一个高位字节了。 3.将传参值直接赋给汉字显示函数,如"过"用"0xb9,0xfd"是显示不了的,只能用"0xb9,0x00”。 4.比较...
  • "的ASCII值恰好是0x3a,0x20,看来这几个汉字是叛变到西文字符去了,机内码只有一个高位字节了。 3.将传参值直接赋给汉字显示函数,如"过"用"0xb9,0xfd"是显示不了的,只能用"0xb9,0x00"。 4.比较发现,显示不...
  • //补0凑齐3位 printf("%02d \r\n", x); //补0凑齐2位 printf("%3d \r\n", x); //补空格,凑齐3位 printf("%d \r\n", x); //不补位,输出有效位 } 输出: 3.3精度 .精度 描述 .数值 对于整数说明符(d, i, o, u, x, x...
  • >> 右移时,右端(低位)移出的二进制舍弃,左端(高位)移入的二进制分两种情况:对于无符号整数和正整数,高位补0;对于负数,高位补1。 short int a =-8,b; b=a>>2; //a的二进制码:1111111111111000 //移位后 ...
  • 9.0 -> 1001.0 ->(-1)^01.0012^3 -> s=0, M=1.001,E=3 127=130 那么,第一位的符号位s=0,有效数字M等于001后面再加20个0,凑满23位,指数E等于3 127=130,即10000010。 所以,写成二进制形式,应该是s E M,即0 ...
  • STC51-C51基础知识

    2021-10-29 20:37:21
    单板机:将CPU芯片、存储器芯片、I/O接口芯片和简单的I/O设备(小键盘、LED显示器)等装配在一块印刷电路板上,再配上监控程序(固化在ROM),就构成了一台单板微型计算机(简称单板机)。单板机的I/O设备简单,...
  • 基于C51的红外遥控开发笔记

    千次阅读 2012-12-10 16:25:44
    一、 红外格式说明 ...注意:第二段的用户码也可以在遥控应用电路被设置成第一段用户码的反码(但不一定是其反码)。  发送时采用38KHz(周期约为26us)载波,占空比为3分之1。      位定
  • #include<intrins.h>中包含的函数说明

    千次阅读 2020-12-25 20:02:03
    将char型变量循环向左移动指定位数后返回(将高位补低位) _cror_ 字符循环右移 将char型变量循环向右移动指定位数后返回(将低位补高位) _irol_ 整数循环左移 将int型变量循环...
  • Step1Step1Step1 :【C51】LED灯闪烁、跑马灯、流水灯、实现每次亮两个灯的流水灯 在我所使用的开发板,LED采用共阳极接法,即所有LED阳极管脚接电源VCC,其阴极管脚接到P2口上。因此,LED发光时,其对应的阴极...
  • 小端(存储)模式,是指数据的低位保存在内存的低地址,而数据的高位,保存在内存的高地址。 我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。 有些ARM处理器还可以由硬件...
  • sprintf 和printf 转换时往往需要输出格式保持一致,比如转换mac地址和ip地址时需要将0显示出来并对齐。 inta=4; printf("%03d",a); 输出:004 也可以用 * 代替位数,在后面的参数列表中用变量控制输出位数; ...
  • 在对单处机进行编程的过程,对位的...在这一节中将详细讲解C51中的位操作及其应用。1、位运算符C51提供了几种位操作符,如下表所示:运算符含义运算符含义&按位与~取反|按位或<<左移^按位异或>>右...
  • 到现在为止市面上的单片机款式种类多如牛毛,继承的功能也根据实际需求演化出了不同的方向。以51系列为例,比较常见的是Intel开发的MCS-51系列,和国内的STC51系列。 之后也以51学习。 二:51的结构 51是40...
  • 二进制是计算技术广泛采用的一种数制。二进制数据是用0和1两个数码...计算机的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。那么java的二进制又是怎么样的呢?让我们一起来揭开它神秘的面...
  • 有符号和无符号指的是数字那么有符号和无符号的区别是什么,我们这里一起来看在C语言的有符号和无符号分析吧,希望这篇文章能够对各位有用。就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们...
  • (移位函数功能:移位函数实现的移位功能就相当于一个队列内循环移动,如 果是左移,那么最高位就被移到最低位了,次高位变为最高位,依次类推) 编译软件:keil5 过程: (1)使用移位库函数,必须包
  • c语言的位移位操作

    2014-06-12 09:27:00
    了解一下C语言里全部的位运算都是指二进制数的位运算。...功能:将整型数a按二进制位向左移动m位,高位移出后,低位补0。 “>>”使用方法: 格式是:a>>m,a和m必须是整型表达式,...
  • 目录 前言:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教! ——By 作者:新晓·故知 ...1-深度剖析数据在内存的存储 1. 数据类型介绍 1.1 类型的基本归类: ...
  • C语言数据的存储

    2021-05-16 09:12:53
    C语言数据的存储 一、类型的基本归类 1、整型 char unsigned char (0-255) signed char (-128-127) short unsigned short [int] (0-65535) signed short [int] (-32768-32767) int ...
  • SHA256算法原理详解

    万次阅读 多人点赞 2018-07-03 23:07:30
    填充是这样进行的:先补第一个比特为1,然后都补0,直到长度满足对512取模后余数是448。 需要注意的是,信息必须进行填充,也就是说,即使长度已经满足对512取模后余数是448,补位也必须进行,这时填充512个...
  • 1.表示方法:在Java语言,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。(1)正数的最高位为0,其余各位代表数值本身(二进制数)。(2)对于负数,通过对该数绝对值...
  • 快速傅里叶变换FFT结果的物理意义,单片机keil C51/avr/dsp程序(已验证) #include //AT89C52 //#include //atmeg128 #include /********************************************************...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 339
精华内容 135
热门标签
关键字:

c51中的>>得时候高位要补0吗

友情链接: EUDBE_2.01_web.zip