12位运算
- 格式:ppt
- 大小:415.50 KB
- 文档页数:33


加法的进位与退位运算在数学中,加法运算是我们最早接触的基本算术运算之一。
加法运算涉及了进位和退位的概念,它们在加法运算中起到了重要的作用。
本文将详细介绍加法的进位与退位运算。
一、进位运算在进行多位数加法运算时,当两个相同位置的数字相加时,如果结果超过了该位置的最大值(一般为9),就需要进位。
进位是指将前一位的数值加1。
进位运算的规则如下:1. 个位进位:当个位相加结果超过9时,需要进位。
例如,8 + 7 = 15,个位相加结果为5,超过了9,因此需要进位。
进位后的结果为15。
2. 十位进位:当十位相加结果超过9时,需要进位。
例如,74 + 48 = 122,个位相加结果为2,十位相加结果为12,超过了9,因此需要进位。
进位后的结果为122。
3. 百位进位:当百位相加结果超过9时,需要进位。
例如,135 + 285 = 420,个位相加结果为5,十位相加结果为20,百位相加结果为4,超过了9,因此需要进位。
进位后的结果为420。
二、退位运算与进位运算相反,退位运算在进行多位数减法运算时出现。
当计算的结果小于被减数时,就需要退位。
退位是指从前一位借位,使当前一位的数值减1。
退位运算的规则如下:1. 个位退位:当个位相减结果小于0时,需要退位。
例如,8 - 7 = 1,个位相减结果为1,小于0,因此需要退位。
退位后的结果为1。
2. 十位退位:当十位相减结果小于0时,需要退位。
例如,74 - 48= 26,个位相减结果为6,十位相减结果为2,小于0,因此需要退位。
退位后的结果为26。
3. 百位退位:当百位相减结果小于0时,需要退位。
例如,135 - 285 = -150,个位相减结果为5,十位相减结果为15,百位相减结果为-1,小于0,因此需要退位。
退位后的结果为-150。
进位与退位运算在加法运算中起到了重要的作用,使得我们可以进行多位数的相加和相减。
掌握进位与退位运算的方法,有助于我们更准确地进行加法运算,提高计算的准确性与效率。
【转载】常用位操作位运算应用口诀清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或移位运算要点1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。
2 " < <" 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。
3 ">>"右移:右边的位被挤掉。
对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。
4 ">>>"运算符,右边的位被挤掉,对于左边移出的空位一概补上0。
位运算符的应用(源操作数s 掩码mask)(1) 按位与-- &1 清零特定位(mask中特定位置0,其它位为1,s=s&mask)2 取某数中指定位(mask中特定位置1,其它位为0,s=s&mask)(2) 按位或-- ¦常用来将源操作数某些位置1,其它位不变。
(mask中特定位置1,其它位为0 s=s ¦mask)(3) 位异或-- ^1 使特定位的值取反(mask中特定位置1,其它位为0 s=s^mask)2 不引入第三变量,交换两个变量的值(设a=a1,b=b1)目标操作操作后状态a=a1^b1 a=a^b a=a1^b1,b=b1b=a1^b1^b1 b=a^b a=a1^b1,b=a1a=b1^a1^a1 a=a^b a=b1,b=a1二进制补码运算公式:-x = ~x + 1 = ~(x-1)~x = -x-1-(~x) = x+1~(-x) = x-1x+y = x - ~y - 1 = (x ¦y)+(x&y)x-y = x + ~y + 1 = (x ¦~y)-(~x&y)x^y = (x ¦y)-(x&y)x ¦y = (x&~y)+yx&y = (~x ¦y)-~xx==y: ~(x-y ¦y-x)x!=y: x-y ¦y-xx < y: (x-y)^((x^y)&((x-y)^x))x <=y: (x ¦~y)&((x^y) ¦~(y-x))x < y: (~x&y) ¦((~x ¦y)&(x-y))//无符号x,y比较x <=y: (~x ¦y)&((x^y) ¦~(y-x))//无符号x,y比较应用举例(1) 判断int型变量a是奇数还是偶数a&1 = 0 偶数a&1 = 1 奇数(2) 取int型变量a的第k位(k=0,1,2……sizeof(int)),即a>>k&1(3) 将int型变量a的第k位清0,即a=a&~(1 < <k)(4) 将int型变量a的第k位置1,即a=a ¦(1 < <k)(5) int型变量循环左移k次,即a=a < <k ¦a>>16-k (设sizeof(int)=16)(6) int型变量a循环右移k次,即a=a>>k ¦a < <16-k (设sizeof(int) =16)(7)整数的平均值对于两个整数x,y,如果用(x+y)/2 求平均值,会产生溢出,因为x+y 可能会大于INT_MAX,但是我们知道它们的平均值是肯定不会溢出的,我们用如下算法:int average(int x, int y) //返回X,Y 的平均值{return (x&y)+((x^y)>>1);}(8)判断一个整数是不是2的幂,对于一个数x >= 0,判断他是不是2的幂boolean power2(int x){return ((x&(x-1))==0)&&(x!=0);}(9)不用temp交换两个整数void swap(int x , int y){x ^= y;y ^= x;x ^= y;}(10)计算绝对值int abs( int x ){int y ;y = x >> 31 ;return (x^y)-y ; //or: (x+y)^y // x ^(~ (x >> 31) + 1) + x >> 31}(11)取模运算转化成位运算(在不产生溢出的情况下)a % (2^n) 等价于a & (2^n - 1)(12)乘法运算转化成位运算(在不产生溢出的情况下)a * (2^n) 等价于a < < n(13)除法运算转化成位运算(在不产生溢出的情况下)a / (2^n) 等价于a>> n例: 12/8 == 12>>3(14) a % 2 等价于a & 1(15) if (x == a) x= b;else x= a;等价于x= a ^ b ^ x;(16) x 的相反数表示为(~x+1)实例功能¦示例¦位运算----------------------+---------------------------+--------------------去掉最后一位¦(101101->10110) ¦x >> 1在最后加一个0 ¦(101101->1011010) ¦x < < 1在最后加一个1 ¦(101101->1011011) ¦x < < 1+1把最后一位变成1 ¦(101100->101101) ¦x ¦1把最后一位变成0 ¦(101101->101100) ¦x ¦1-1最后一位取反¦(101101->101100) ¦x ^ 1把右数第k位变成1 ¦(101001->101101,k=3) ¦x ¦(1 < < (k-1))把右数第k位变成0 ¦(101101->101001,k=3) ¦x & ~ (1 < < (k-1))右数第k位取反¦(101001->101101,k=3) ¦x ^ (1 < < (k-1))取末三位¦(1101101->101) ¦x & 7取末k位¦(1101101->1101,k=5) ¦x & ((1 < < k)-1)取右数第k位¦(1101101->1,k=4) ¦x >> (k-1) & 1把末k位变成1 ¦(101001->101111,k=4) ¦x ¦(1 < < k-1)末k位取反¦(101001->100110,k=4) ¦x ^ (1 < < k-1)把右边连续的1变成0 ¦(100101111->100100000) ¦x & (x+1) 把右起第一个0变成1 ¦(100101111->100111111) ¦x ¦(x+1)把右边连续的0变成1 ¦(11011000->11011111) ¦x ¦(x-1)取右边连续的1 ¦(100101111->1111) ¦(x ^ (x+1)) >> 1去掉右起第一个1的左边¦(100101000->1000) ¦x & (x ^ (x-1)) 判断奇数(x&1)==1判断偶数(x&1)==0判断是否只有一个1: n & (n-1) == 0例如求从x位(高)到y位(低)间共有多少个1public static int FindChessNum(int x, int y, ushort k){int re = 0;for (int i = y; i <= x; i++){re += ((k >> (i - 1)) & 1);}return re;}。
文章标题:深度解析C语言34种运算符的意义和用法在计算机编程世界中,C语言是一种广泛应用的计算机程序设计语言,它为程序员提供了丰富的运算符来完成各种数学和逻辑运算。
作为一个编程语言中至关重要的部分,了解和掌握C语言的运算符对于程序员来说至关重要。
在本文中,我们将深度解析C语言的34种运算符,包括它们的意义和用法,以帮助读者全面了解这些运算符的特点和功能。
1. 赋值运算符赋值运算符是C语言中最基本的运算符之一,用于将右侧的数值或表达式赋给左侧的变量。
赋值运算符由等号(=)表示,例如:a = 10;将10这个数值赋给变量a。
2. 算术运算符算术运算符用于执行基本的数学运算,包括加法(+)、减法(-)、乘法(*)、除法(/)和求模(%)等。
这些运算符在C语言中十分常见,用于处理数字类型的变量。
3. 自增、自减运算符自增(++)和自减(--)运算符用于增加或减少变量的值,它们可以用作前缀或后缀运算符,分别表示在表达式中先执行运算或者先获取变量的值再执行运算。
4. 关系运算符关系运算符用于比较两个值的大小关系,包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)等。
这些运算符经常用于条件判断和逻辑运算中。
5. 逻辑运算符逻辑运算符用于执行逻辑运算,包括与(&&)、或(||)和非(!)运算。
它们通常用于条件判断和逻辑组合中,能够帮助程序员处理复杂的逻辑关系。
6. 位运算符位运算符用于对整数类型的数值进行位操作,包括按位与(&)、按位或(|)、按位取反(~)、按位异或(^)和左移(<<)、右移(>>)等。
位运算符在处理底层数据操作时十分重要。
7. 条件运算符条件运算符(?:)是C语言中唯一的三目运算符,用于根据条件的真假选择不同的值。
它使得代码更加简洁和可读性更强。
8. sizeof运算符sizeof运算符用于获取数据类型或变量的字节大小,它在编程时经常用于内存分配和操作中。