首页
学习
活动
专区
圈层
工具
发布

【C语言初阶】什么操作符你还没搞懂?试试这篇文章让你彻底理解各种操作符!

文章目录 一、 算术操作符: 1.1 加减乘除 二、 移位操作符: 2.1 计算机中整数的存储 2.2 >> 右移操作符 2.3 左移操作符 2.4 &按位与 2.5 |按位或 2.6 ^ 按位异或...补码相同 2.2 >> 右移操作符 右移: 算术右移(右边丢弃,左边补原来的符号位) 逻辑右移(右边丢弃,左边直接补0) 在c语言中没有明确规定到底是算术右移还是逻辑右移,一般编辑器上采用的...算术右移 2.3 左移操作符 移位规则: 左边抛弃、右边补0 位操作符:他们的操作数必须是整数 在这里插入代码片 2.4 &按位与 & //按位与 & -- 对应二进制位有0则为0,两个同时为1...- 计算结果是真,使用1表示 && 操作符,左边为假,右边就不计算了 || 逻辑或 || 操作符,左边为真,右边就不在计算 全篇总结 ✅ 归纳: 好了以上就是关于C语言中全部 操作符的讲解和解释啦,...你们的点赞就是博主更新最大的动力! 有问题可以评论或者私信呢秒回哦。

37310

计算机组成原理---关于补码,移位和溢出的分析

; 2.移位运算 下面的这个解释一下我们的补码的移位运算(算术移位)的相关的规则把,就是我们的源码左右移的时候是补上0,对于这个反码我们是补上1,但是我们的补码的规则综合了两者,就是左移的时候是补上1,...右移的时候是补上0; 原因分析:通过下面的这个图可以直观的看到我们的这个补码的前面是和我们的反码保持一致的,而且这个补码的后半部分和我们的源码保持一致 逻辑移位:无论是什么数字,都是补上0,无论是左移还是右移...; 3.溢出 下面展示的就是两个不同的情况: 1)两个正数经过运算之后成为了一个负数; 2)两个小数(正数)运算之后成为负数; 其实两个例子的本质是一样的,就是超出了范围,导致了这个溢出的情况; 下面的这个是关于我们的溢出的具体在我们的这个数轴上面的不同的分类的情况...0还是1,表示我们的这个对应的不同的溢出的类型; 4.3第三方法 使用双符号位的方法,记录两个符号位的数据,进行异或运算,判断我们的这个结果是不是溢出的情况; 5.符号拓展 分为正数和负数的情况,其中里面有细分成为这个整数和小数的情况...: 1.对于正数,这个扩展的规则是统一的; 2.但是对于负数,我们需要分为不同的码制进行区分和辨别处理; 6.经典题目 逻辑移位:一定是添加0; 算术移位:符号位不需要变动,也就是1; 下面的这个情况:

39200
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    千万别小看这些运算符背后的逻辑

    位运算符主要分为与&、或|、非~、异或^以及左移右移>>、无符号右移>>>等。 位运算符都是二进制的运算,并且是基于32位整数运算。...这与机器数采用有符号数还是无符号数有关。对无符号数的移位称为逻辑移位,对有符号数的移位称为算术移位。...也就是说: 1 << 32 // 等价于 1 << 0 带符号右移>> 对于带符号右移(算术右移)运算而言,第一个操作数是有符号数,它的最高位代表符号位,在移位后的符号位不改变。...0000 0000 // 也就是2的30次方减去1,等于1073741823 左移<< 翻阅《计算机组成原理教程》可以发现,书中有描述到算术左移和逻辑左移。...我个人的想法是,应该是要回到移位运算的本质。 二进制表示的机器数在相对于小数点作n位左移或右移时,其实质就是该数乘以或除以2n(n=1,2, …, n)。

    1K30

    位运算

    其实二进制的运算并不是很难掌握,因为位运算总共只有5种运算:与、或、异或、左移、右移。...一般而言,及其支持两种形式的右移:逻辑右移和算术右移。逻辑右移在左端补k个0;算术右移是在左端补k个最高有效位的值。       c语言标准并没有明确定义应该使用哪种类型的右移。...对于无符号数据(也就是以限定词unsigned声明的整型对象),右移必须是逻辑的。而对于有符号数据(默认的声明的整型对象),算术的或者逻辑的右移都可以。...实际上,几乎所有的编译器/机器组合都对有符号数据使用算术右移,并且我们一般都假设机器会使用这种右移(算术右移)。        ...关于移位的运算有这样的等价关系:把整数右移一位和把整数除以2在数学上是等价的。

    1.3K80

    Java基础——左移和右移

    左移位:有符号的移位操作   左移操作时将运算数的二进制码整体左移指定位数,左移之后的空位用0补充 右移位:>>,有符号的移位操作   右移操作是将运算数的二进制码整体右移指定位数,右移之后的空位用符号位补充...上面解释了带符号的移位操作,下面解释一下不带符号的移位操作 无符号的移位只有右移,没有左移使用“>>>”进行移位,都补充0 例如: public static void main(String[] args...可以参考 移位操作要注意的问题是高(低)位是补0还是补1和对char, byte, short型的操作: (1)<< : (left-shift), 最低位补0 (2)>> : (signed right-shift...), 右移过程使用符号位扩展(sign extension),即如果符号为为1则高位补1, 是0则补0,也就是逻辑右移 (3)>>> : (unsigned right-shit),右移过程使用零扩展(...zero extension),即最高位一律补0,也就是算术右移 (4)移位操作的数据类型可以是byte, char, short, int, long型,但是对byte, char, short进行操作时会先把它们变成一个

    1.8K50

    深入理解计算机系统(2.3)------布尔代数以及C语言运算符

    2、C 语言中的位级运算   C 语言是支持按位布尔运算的。也就是我们上面所讲的四种布尔运算符其实也是 C 语言所使用的。在 C 语言中,这些运算符能运用到任何 “ 整型” 的数据类型。...3、C 语言中的 逻辑运算   C 语言中的逻辑运算符 ||、&&、! ,分别对于命题逻辑中的或、与、非。注意 逻辑运算 和 位级运算 它们的功能是有很大的区别的。   ...4、C 语言中的 移位运算   移位运算分为左移和右移。   ...此时相当于最高的那k位都被丢弃了,在最右端补了k个0。    右移:运算符是 >>。右移一般机器支持两种形式,逻辑右移和算术右移。     逻辑右移在左端补k 个0。...C语言中对于无符号数据必须逻辑右移。     算术右移是在左端补 k 个最高有效位的值。 ?    这在Java当中是有明确定义的。表达式 x>>k会将 x 算术右移 k 个位置。

    2K50

    C的|、||、&、&&、异或、~、!运算 位运算

    有两个运算符: 左移) 和 >> (右移) 移位运算是双目运算,有两个运算分量,左分量为移位数据对象,右分量的值为移位位数。...移位运算将左运算分量视作由二进位组成的位串信息,对其作向左或向右移位,得到新的位串信息。 移位运算符的优先级低于算术运算符,高于关系运算符,它们的结合方向是自左至右。...与左移相反,对于小整数,每右移1位,相当于除以2。在右移时,需要注意符号位问题。对无符号数据,右移时,左端空出的位用0补充。...对于负数右移,称用0 补充的系统为“逻辑右移”,用1补充的系统为“算术右移”。...以下代码能说明读者上机的系统所采用的右移方法: printf(“%d\n\n\n”, -2>>4); 若输出结果为-1,是采用算术右移;输出结果为一个大整数,则为逻辑右移。

    1.8K30

    C语言初阶——操作符

    右移位操作符>>,同模号一样,它们的两端也必须为整数 左移位操作符 << 移位规则:将二进制整体向左移动,右边补0 右移操作符 >> 移位规则:将二进制整体向右移动,左边补值分情况...1.逻辑右移:左边补0 2.算术右移:左边补原符号位(正数为0,负数为1) 小结  左移一位有将原数字扩大两倍的效果,右移一位有将原数字缩小两倍的效果(特殊数除外,如0、-1、1等) 注意...隐式类型转换(整型提升) 因CPU设计问题,使其很难实现整型(4字节,32比特位)以下的运算,于是这些类型在进行运算时会先发生整型提升(整型提升至32比特位,负数补1,正数补0),再进行相应计算,当计算完成后...,会发生截断,截断值刚好能返回原来的类型。...不要因为自己的个人理解而写出逻辑混乱的错误代码,我们可以将复杂语句拆分,代码简洁不一定可行,不出问题才是成功。   如果你觉得本文写的还不错的话,期待留下一个小小的赞,你的支持是我分享的最大动力!

    34110

    程序员数学 —— 二进制

    通过本文,你将了解到以下几点: 什么是进制,以及 进制之间 的转换 计算机为什么要用二进制 了解位运算,以及 逻辑运算 和 算术运算的 区别 什么是进制?...看起来好像没有问题啊,这个不就是我们期望的么? 确实,看起来确实是我们期望的。但是如果让你现在给这个右移一个定义,那么你该怎么给呢?...算术右移 用来将一个数的除符号位外的各二进制位全部右移若干位,并在符号位之后用符号位 1 填补,舍弃低位。 这样就很清楚了,所以我们可以看到 我们使用的 -16 >> 3 是属于 算术右移 的。...那么逻辑右移是怎么样的呢?...scala> -16 >>> 3 res22: Int = 536870910 所以说 逻辑右移 是>>>, 一个负数直接就被我们移成了一个正数 这里也可以考虑下为什么没有 逻辑左移,这里本人也没有找到标准答案

    1.1K20

    区分算术移动和逻辑移动

    1.逻辑移位 操作对象: 二进制无符号数,例如像地址。 (1)逻辑右移 特点:高位补0,低位移出。 (2)逻辑左移 特点:低位补0,高位移出。 问题探究:什么时候会发生溢出?...如果高位移出的是一,则左移发生溢出。 2.算术移位 操作对象: 二进制有符号数,现代计算机中有符号数字使用补码表示。由于计算机不能识别正负号,而0和1恰好可以表示这两种状态。...问题探究:什么时候会发生溢出?如何判断溢出? 算术左移溢出判断:如果移出的位不等于新的符号位,则溢出。 算术右移不会发生溢出,但是如果移出的低位不为0,则可能发生数据丢失的的情况。...(1)算术左移 算术左移:按指定的位数向左移位,C语言中用符号 “<<” 表示。 移出的位放在一个特殊的寄存器中,低位补0。 算术左移可以实现的功能: 左移n位实现乘以2^n的功能。...(2)算术右移 算术右移:按指定的位数向右移位,C语言中用符号 “>>” 表示。 算术右移可以实现的功能: 右移n位实现乘以2^(-n)的功能。

    2.9K20

    HDLBits:在线学习 Verilog (二十二 · Problem 105 - 109)

    ,附带同步置位和左移或右移的使能信号。...该寄存器可以由amount控制来移动方向和每次移动的次数。 算术右移移位寄存器中的符号位(q [63])移位,不像是逻辑右移中进行补零的操作。而是保留符号位后再进行移位。...Hint 一个5-bit值为11000的寄存器算术右移一位后为11100, 而逻辑右移后为01100。...同样的,一个5-bit值为01000的寄存器算术右移一位后为00100,且该寄存器逻辑右移会产生同样的结果。 逻辑移位寄存器和算术左移移位寄存器没有区别。 load :置位信号。...ena :使能信号,来选择是否移位 amount :选择移位的方向和移位的个数 2'b00 : 左移1bit 2’b01 : 左移8bit 2'b10 : 右移1bit 2'b11 : 右移8bit q

    89210

    计算机底层知识之二进制

    移位运算 「移位运算」指的是将二进制数值的各数位进行「左右移位」的运算。 移位有「左移」(向高位方向)和「右移」(向低位方向)两种。 假设存在如下处理。...❝针对「左移运算」,空出来的低位要进行「补0操作」。 ❞ 而右移操作,由于情况特殊,我们后面再做详细介绍。 此外,移位操作使最高位或最低位「溢出」的数字,直接丢弃就可以了。...❝补数求解的变换方法就是「取反加1」 ❞ 将二进制数的值取反加1的结果,和原来的值相加,结果为0 ---- 逻辑右移和算术右移的区别 右移有移位后在最高位补0和补1两种情况。...如果数值是用补数表示的负数值,那么右移后再空出来的最高位补1 如果是正数,只需要在最高位补0即可 ❝只有在「右移」时才必须区分「逻辑位移」和「算术位移」 ❞ ❝左移时,无论是「图形模式」(逻辑左移)还是...「算术运算」是指加减乘除四则运算 「逻辑运算」是指对二进制数「各数字位的0和1分别进行处理」的运算 逻辑「非」(NOT运算) 逻辑「与」(AND运算) 逻辑「或」(OR运行) 逻辑「异或」(XOR运算)

    1.2K10

    plc的移位指令C语言实现,PLC中使用移位指令是如何实现移位动作的

    (指将要移位的操作数换成二进制表示方法,如62H为01100010B.移位时只是寻常理解中的将这些二进制位逐个向左或向右移,移走的数根据操作符决定舍弃或者放入空出的位置,空出的位置根据操作符决定补0或者放入移走的数...逻辑左移SHL(Shift Logical Left)和逻辑右移SHR(Shift Logical Right) 格式:SHL(或SHR) OPR,CNT 逻辑左移/右移指令只有它们的移位方向不同,移位后空出的位都补...注:逻辑移位指令常用于无符号数*2或/2,受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。 循环左移ROL(Rotate Left)和循环右移ROR(Rotate Right)。...以上算术,循环和逻辑移位指令均可以作字或字节的操作,386及其后继机型还可作双字操作。...汇编语言中的“移位指令”具体的操作是什么 SHL/SAL一样:逻辑/算术左移,最高位进到CF,最低位补0; SHR:逻辑右移,最低位进到CF,最高位补0; SAR:算术右移,最低位进到CF,最高位不变;

    1.7K20

    Java中的>>,>>>和

    前言 我们都知道对于有符号数据类型,二进制最左端的数字为符号位,0代表正,1代表负,这里先介绍几个概念 逻辑左移=算术左移:高位溢出,低位补0 逻辑右移:低位溢出,高位补0 算术右移:低位溢出,高位用符号位的值补...比如一个有符号位的8位二进制数10101010,[]是添加的数字 逻辑左移一位:0101010[0] 逻辑左移两位:101010[00] 算术左移一位:0101010[0] 算术左移两位:101010...[00] 逻辑右移一位:[0]1010101 逻辑右移两位:[00]101010 算术右移一位:[1]1010101 算术右移两位:[11]101010 算术左移和算术右移主要用来进行有符号数的倍增...、减半 逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半 Java中是没有无符号数据类型的,C和C++中有 符号 例子 解释 << num<< n 算术左移 相当于 num*(2的n次方) >...> num>>n 算术右移 相当于num/(2的n次方) >>> num>>>n 逻辑右移,当num为正数和算术右移一个效果 例子 public static void main(String[] args

    1.3K30

    汇编语言——移位指令

    基本概念 移位操作指令:移位操作指令是一组经常使用的指令,属于汇编语言逻辑指令中的一部分,它包括移位指令(含算术移位指令、逻辑移位指令),循环移位指令(含带进位的循环移位指令),双精度移位指令三大类。...其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0~255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。...移位指令 一、算术移位指令 1、算术左移指令SAL 功能:左移一次,最低位补0,最高位送入CF标志位,如图: 意义:左移n次,等于x2的n次幂。所以可用于有符号操作数做x2的n次幂运算。...2、算术右移指令SAR 功能:右移一次,最高位保持不变,最低位送入CF标志位,如图: 意义:右移n次,等于/2的n次幂。所以可用于有符号操作数做/2的n次幂运算。...二、逻辑移位指令 1、逻辑左移指令SHL 功能:同SAL,如图: 意义:同SAL 2、逻辑右移指令SHR 功能:右移一次,最高位补0.区别!最低位送入CF标志位。

    4.3K10

    【编程基础】如何了解c语言中的位运算?

    C语言的位运算有一下六中: & 按位与 | 按位或 ^ 按位亦或 ~ 按位取反 左移 >> 右移 按位与& 两个对应的位为1,运算后对应位为1,否则为0...右移>> 将整个位右移指定位数,比如:10101100 >> 3,结果为多少?右移有点不一样,它分逻辑右移和算术右移。...如果是逻辑右移,向右移动后,左边补0;如果是算术右移,则左边最高位是0时,就补0,如果左边最高位是1,则根据编译器不同可能会不同。比如:逻辑右移:10101100 >> 3,结果为000 10101。...右边的100被移走,左边补0;算术右移:10101100 >> 3,结果可能为111 10101,也可能为000 10101。当然右边的100还是被移走。...但是他的效率也很高,同样一个任务,往往用位运算能提高速度。

    2.2K50

    plc的移位指令C语言实现,移位指令做流水灯-PLC中使用移位指令是如何实现移位动作的-电气资讯 – 电工屋…「建议收藏」

    (指将要移位的操作数换成二进制表示方法,如62H为01100010B.移位时只是寻常理解中的将这些二进制位逐个向左或向右移,移走的数根据操作符决定舍弃或者放入空出的位置,空出的位置根据操作符决定补0或者放入移走的数...逻辑左移SHL(Shift Logical Left)和逻辑右移SHR(Shift Logical Right) 格式:SHL(或SHR) OPR,CNT 逻辑左移/右移指令只有它们的移位方向不同,移位后空出的位都补...注:逻辑移位指令常用于无符号数*2或/2,受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。 循环左移ROL(Rotate Left)和循环右移ROR(Rotate Right)。...以上算术,循环和逻辑移位指令均可以作字或字节的操作,386及其后继机型还可作双字操作。...汇编语言中的“移位指令”具体的操作是什么 SHL/SAL一样:逻辑/算术左移,最高位进到CF,最低位补0; SHR:逻辑右移,最低位进到CF,最高位补0; SAR:算术右移,最低位进到CF,最高位不变;

    2.1K10

    九种移位寄存器原理与设计(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR)

    3.1 逻辑移位与算术移位寄存器 逻辑移位与算术移位寄存器均属于非循环移位寄存器; 逻辑移位:逻辑移位是指逻辑左移和逻辑右移,移出的空位都用0来补。...算术移位:算术移位就需要分有符号型值和无符号型值。对于无符号型值,算术移位等同于逻辑移位;而对于有符号型值,算术左移等同于逻辑左移,算术右移补的是符号位,正数补0,负数补1。...简而言之,两者的区别在于:逻辑移位不考虑符号位,左移和右移都只补零;算术移位考虑符号位,左移补零,右移补符号位。...但是101十进制是5,逻辑右移一位是010十进制是2,此时舍掉了余数1; 3.2 verilog代码 要求:设计一个四位非循环移位寄存器,可实现逻辑右边移和算术右移(逻辑左移和算术左移相同,此处不做展开...逻辑移位与算术移位寄存器:最重要的是弄清楚逻辑移位与算术移位的原理、逻辑移位与算术移位的区别(左移一致,仅右移有区别),在此基础上根据上一个简单移位寄存器进行设计。

    18.2K20

    c语言中位运算符_位运算符的用法

    一.C语言位运算符简介 C语言的位运算符有六种,分别是: >> 右移运算符 左移运算符 & 按位与运算符 | 按位或运算符 ^ 按位异或运算符 ~ 按位取反运算符...这些运算符都是对于基本数据类型的二进制位进行操作的,这里我们只讨论整型数据类型的位运算 二.各个运算符的具体使用 >> 右移运算符:将整数的二进制形式整体向右移动,移动过后左边缺的位的填充取决于编译器,...可能是算术右移也可能是逻辑右移 左移运算符:将整数的二进制形式整体向左移动,移动过后右边缺的位用0补全 逻辑右移:在位移的过程中,符号位左边可能移入新的位,移入的新位用0填充,则称为逻 辑移位 算术右移...具体是逻辑右移还是算术右移取决于编译器(我使用的编译器为vs,为算术右移) 注意:没有逻辑左移和算术左移 例: int a = 10; int b = 20; int c = -2; int d = -...他希望你能帮助他取得胜利。 输入 第一行有两个整数m,n(0有m个球,n表示这个游戏进行n次。

    1.4K60
    领券