×

移位运算

C#移位运算问题?位移位运算符

admin admin 发表于2022-05-13 16:49:57 浏览129 评论0

抢沙发发表评论

C#移位运算问题

1、 c 》》 16 = 0x1AF034 》》 16 = 0x00001A 0x00001A & 0x00FFFF = 0x00001A = 26 2、 c & 0x0000FF = 0x1AF034 & 0x0000FF = 0x000034 = 52 位移运算就是将数字的二进制形式按指定的位数左移或右移,因为十六进制的每位数可以化成一个四位数的二进制的数字(2的四次方为16),所以在二进制中移动16位就是在十六进制中移动16/4 = 4位,那么0x1AF034 》》 16 = 0x00001A 按位且(&)这个运算符,这个运算符的意思是将数字转为二进制逐位进行且比较,按照1且1为1,1且0为0,0且0为0的规则,这样拆开来运算后再整合为结果 其实有个快捷方法,还是因为十六进制的每位数可以化成一个四位数的二进制的数字(2的四次方为16),而且0x0 = 0000B,0xF = 1111B,也就是说如果对应位上数是F,那么这位上的数可以保留,否则变为0,如上面的0x0000FF & 0x1AF034,你可以看到前面的数字只有个位和十位上有数字,所以只保留后面数字的个位和十位就是结果,那么就是0x000034 = 52了

位移位运算符

c语言位运算符包括位逻辑运算符和移位运算符。位逻辑运算符:&按位与,|按位或,^按位异或,~取反移位运算符:《《左移,》》右移-----------------------------------------------------------------------&按位与运算符:二进制中运算,0&0=0,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=0,0与0位异或等于0,1与1位异或等于0,1和0异或等于1~取反运算符,二进制中运算:~1=0,~0=1,非1等于0(非真得假)非0等于1(非假得真)。《《左移运算符:运算规则:把“《《“左边的运算数的各二进制位全部左移若干位,移动的位数由“《《“右边的数指定,高位丢弃,地位补0。可以实现乘法运算,二进制0000011《《2得二进制00001100.》》右移运算符:运算规则:把“》》“左边的运算数的各二进制位全部右移若干位,移动的位数由“》》“右边的数指定。有符号的数右移时符号也随着右移;是正数的话在最高位补0,是负数的话,符号位为1,最高位补0还是补1决取于计算机系统的规定。移入0的称为“逻辑右移“,移入1的称为“算术左移”。很多系统规定为补1,即“算术右移”。右移运算可以实现除法的功能,右移1位相当于该数除以2,右移n位相当于该数除以2的n次方。-------------------------------------------------------------------------运算符优先级运算符类型&8双目|10双目^9双目~2单目《《5双目》》5双目---------------------------------------------------------------------------

“移位运算符在移位操作中,无论左移还是右移,所移出的空位一律补0”这句话是否正确

不完全正确。

1、移位操作在程序设计中,移位操作运算符的一种。

2、在c++中,移位运算符有双目移位运算符:《《(左移)和》》(右移)。移位运算符组成的表达式也属于算术表达式,其值为算术值。

3、首先要明白一点,这里面所有的操作都是针对存储在计算机中中二进制的操作,那么就要知道,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的。

左移位:《《,有符号的移位操作;

左移操作时将运算数的二进制码整体左移指定位数,左移之后的空位用0补充;

右移位:》》,有符号的移位操作;

右移操作是将运算数的二进制码整体右移指定位数,右移之后的空位用符号位补充,如果是正数用0补充,负数用1补充。

无符号的移位只有右移:》》》

右移之后的空位全部补0。

4、你可以用一个立即值(从 0 到 31)指定移位数量,或用包含在 0 和 31 之间的一个值的寄存器指定移位数量。

逻辑或算术左移(LSL)

MOV R1, #12

MOV R0, R1, LSL#2

R0 是 48,这些指令形成的总和是R0 = #12, LSL#2 等同于 BASIC 的 R0 = 12 《《 2