2.1 C语言下的位运算

位运算符:

注:运算量只能为整型和字符型数据,不能是实数型的数据。

当进行&运算时:0&1=0;1&0=0;1&1=1;0&0=0;

当进行|运算时:0|1=1;1|0=1;1|1=1;0|0=0;

当进行^运算时:0^1=1;1^0=1;1^1=1;0^0=0;

异或的交换:

a=a^b;b=b^a;a=a^b;

证明:因为a=a^b,b=b^a,a=a^b;

所以当计算前两个时可得:b=a.

计算第三个可得到的结果为:a=b.

当进行<<运算时:如a=15;a=a<<2时,a的二进制码为00001111,则左移两位后二进制为:00111100(高位左移溢出,舍去),即a=60。a=15*2的2次幂(这个公式只能是在溢出的最高位里不含有1的情况下使用)。

当进行>>运算时:当无符号时,如a=15;a=a>>1时,a的二进制码为00001111,则右移一位后二进制为:00000111,即a=7.

当有符号时,如a=-10时,对a进行a=a>>1时,则a在计算机内的表示的二进制为a的补码(原码取反加1),另在计算机里负数进行右移时有两种表现形式,1.逻辑右移(即最高位加0)。2.算数右移(最高位加1)。

如下介绍两种不同的右移方式:

a=-10,其原码取绝对值为00001010,取反为:11110101,补码为:11110110,则当其是逻辑右移时,其右移的补码为:01111011,再求出其原码为:10000101。最高位的1为符号。所以可得到输出结果为:a=-5。

当进行算数右移时,其右移后的补码为:11111011,求出其原码为:00000101,即输出的结果为:a=5。

2.1 C语言下的位运算

时间: 2024-10-15 03:39:17

2.1 C语言下的位运算的相关文章

深入理解计算机系统(2.2)---布尔代数以及C语言上的位运算

本文转载地址:http://www.cnblogs.com/zuoxiaolong/p/computer6.html 布尔代数上的位运算 布尔代数是一个数学知识体系,它在0和1的二进制值上演化而来的. 我们不需要去彻底的了解这个知识体系,但是里面定义了几种二进制的运算,却是我们在平时的编程过程当中也会遇到的.这四种运算分别是或.与.非和异或.下图展示了在布尔代数的知识体系中,对这四种运算的定义. 从左至右依次是非.与.或以及异或.这个图阐述的是针对一位二进制的运算结果,我们可以将其扩大到N位二进

关于c语言中的位运算。。。

位运算是一种针对二进制数的一种运算 位运算 共有六种 都有其对应得操作符号 &      (and)      位于 |        (or)         位或 ~      (not)        取反 ^       (xor)        异或 >>    (shr)    右移一位 <<    (shl)     左移一位 运算说明: === 1. and运算 === and运算通常用于二进制取位操作,例如一个数 and 1的结果就是取二进制的最末位.这可

嵌入式c语言中的位运算

位运算在嵌入中也是一个重要的点,下面就简单介绍和举一些有用的例子,如果有不足的话,请补充,废话不多说,直接开始! 位运算操作符有6个:&,|,^,~,>>,<< &   只有1&1才等于1,其它都为0 |   只有0|0才等于0,其它都为1 ^   异或,相异为1,相同为0,用来检查两个操作数的某对应位是否一致 ~   非,按位反,任何数的非与数本身相加都等于-1(如果不懂的话,请查看下一篇补码) >>  左移,相当乘以2-->左移之后,后

#C语言初学记录(位运算)

位运算 Problem Description7-1 数组元素循环右移问题 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0 ??A?1?A?N?1)变换为(A?N?M?? ?A?N?1?? A?0?? A?1?? ?A?N?M?1?? )(最后M个数循环移至最前面的M个位置).如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法? 输入格式: 每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0):

5/30 c语言中的位运算

1.什么是位运算? 位运算是指按二进制位进行的运算.因为在系统软件中,常要处理二进制的问题.储存单元中的各二进制位左移或者右移一位,两个数按位相加等.c语言灵活,接近底层,对程序员的要求高,不像其他语言对c语言进行了封装,出错性会高很多. 2.位运算符和位运算. 运算符&按位与  ~取反 |按位或    <<左移  ^按位或   >>右移.位运算中除了~以外,均为二元元运算符,即要求两侧各有一个运算量. 3.与&的应用. 清零,无论任何一个二进制的书与上一个0000

第十六天:C语言进阶之位运算及内嵌汇编

位运算在驱动开发中是经常遇到的,尤其是置0和置1.既要指定的位数发生变化,又不能改变其它位的值.还要高效率的编写代码.这时候技巧就很重要了.在位运算中有几个符号: |  按位或 & 按位与  ^ 异或  -按位非 1 #include<stdio.h> 2 3 int main() 4 { 5 int a = 0x1101; 6 int b = 0x1011; 7 int c = 9; 8 printf("a | b is %x\n",a | b); 9 print

C语言实验二——位运算

问题 线性反馈移位寄存器 Linear feedback shift register(LFSR),是指给定前一状态,将该输出的线性函数再用作输入的移位寄存器.异或运算是最常见的单比特线性函数:对寄存器的某些位进行异或操作后作为输入,再对寄存器中的各个比特进行整体移位. 赋给寄存器的初始值叫做“种子”,因为线性反馈移位寄存器的运算是确定的,所以,由寄存器所生成的数据流完全取决于寄存器当时或之前的状态.而且,由于寄存器状态是有限的,它最终肯定会是一个重复的循环.然而,通过本原多项式,线性反馈移位寄

C语言位运算

在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作.一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率.C语言提供了位运算的功能, 这使得C语言也能像汇编语言一样用来编写系统程序. 位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 位运算 1.位与&

NOJ---页面无法显示--位运算

好吧 先解决下 -- 页面无法显示 该死的Oj 不知道为什么突然无法打开了 =-= 我也就忘记题号了 主要现在这场乌拉圭-哥伦比亚 刚开始  忙里偷闲 把这题来写了 明天 不对 应该是今天 不知道要睡到什么时候 =-= 先来贴下关于位运算的操作要求及解释--------我好像上次贴过 我忘记了 orz 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作 运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与lon