C语言的位运算:-3>>2怎么算?结果是-1。大神们具体一点,谢啦

如题所述

以一个字节为例来说明:
char ch=-3;
在计算机中数值是用补码来存储的,故ch在内存中的内容为:
11111101
>>2 右移2位,因为是有符号数,故前面补符号位1,结果为
11111111 (01被移走,前面补了两个1)
这就是-1的补码
所以,结果输出会是-1
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-16
举个简单的例子把, 2<<1,结果为4,2<<2结果为8,找找规律吧,<<后面的数字代表的是2的几次方,<<后面是3那么就是乘以2^3,所以2<<3,其实意思就是2*2^3, 然后我们再推推另一个相反的
>>2,的意思就是除以2^2,所以8>>2,其实就是8/(2^2), 简单记忆就是方向向左就是 左乘2的几次方,方向向右就是 右除2的几次方
第2个回答  2013-03-16
是二进制换算问题!

假设数值都是16位(方便解释),由于计算机是以数据补码的方式存储,所以要先算-3的补码再>>2
3原码:
0000 0000 0000 0011
-3原码:
1000 0000 0000 0011
-3反码:
1111 1111 1111 1100
-3补码:
1111 1111 1111 1101
右移两位全1,对于有符号数,补码全1的值是-1(可以尝试换算为原码然后知为-1)

参考资料:参考资料:http://iask.sina.com.cn/b/12165687.html; http://baike.baidu.com/view/377340.htm

第3个回答  2013-03-16

本回答被提问者采纳
第4个回答  2013-03-16
你把-3转换为补码的形式,然后进行位计算,最后将结果转换回来。

C语言的位运算:-3>>2怎么算?结果是-1。大神们具体一点,谢啦_百度知 ...
char ch=-3;在计算机中数值是用补码来存储的,故ch在内存中的内容为:11111101 >>2 右移2位,因为是有符号数,故前面补符号位1,结果为 11111111 (01被移走,前面补了两个1)这就是-1的补码 所以,结果输出会是-1

c语言位运算-3>>2,为什么是-1
-3的二进制表示为 1000 0011 符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.

c语言位运算
C语言中的位运算符用于操作二进制位。这些运算符直接对整数的二进制位进行操作,是低级语言操作的重要组成部分。它们对于优化程序性能、实现特定功能非常关键。具体的位运算符 1. 位移运算符:这两个运算符用于将二进制位向左或向右移动指定的位数。例如,`x << 2`表示将x的二进制表示向左移动两位,...

C语言——位运算
C语言中,位运算是一种独特且强大的功能,它直接作用于二进制位级,对数据进行操作。位运算符包括按位取反(~)、左移(<>)、按位与(&)、按位或(|)和按位异或(^)。以下是这些运算符的简介和示例:1. 按位取反(~):单目运算符,将运算数所有位取反,如无符号字符a=18,~a的结果...

关于C语言位运算,赋值的问题,回答详细一点。为什么按位取反后输出的结 ...
2的二进制是00000010,取反得到11111101,最高位为1,说明这是个负数的补码。负数的补码,是由其绝对值的原码取反加1得到,反过来,将负数的补码减1取反,就得到其绝对值的原码。11111101-1=11111100,再取反得到00000011,即十进制的3。也就是说该负数的绝对值为3,那么这个负数为-3。所以第一个值...

C语言中位运算符问题 这句话怎么解释啊
右移2位,0000 0010 ,等于2,就等于8除以4,也就是8除以2的2次方;右移3位,0000 0001 ,等于1,就等于8除以8,也就是8除以2的3次方;对于有符号数,最高位为符号位,>> 右移运算,移动的时候符号位会被同时移动。比如有符号数的-8,如果用8位二进制补码表示,就是二进制的 1111 ...

C语言的位运算中,~0为什么等于-1呢?怎么不是1呢?
按位取反,0就是 32个0bit(针对int类型), 取反后是32个1bit即16进制的0xffff_ffff ,而-1==0xffff_ffff,所以0取反就是-1。。。怎么算出来很简单, 计算机中数据是补码形式存储, -1对应的补码是1取反+1, 1取反==0xffff_fffe, 那么再+1就是 0xffff_ffff。。。

c语言位运算符的用法
c语言位运算符的用法如下: 一、位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补...

C语言-自运算、位运算、取反运算
在C语言中,自运算、位运算和取反运算对于理解计算机底层逻辑至关重要。下面将分别介绍这些运算。首先,自运算包括自加运算和自减运算。自加运算有前缀和后缀两种形式,前缀运算符`++`在执行时先将变量值加一,然后返回这个值;后缀运算符`i++`则先返回变量当前值,然后加一。同样,自减运算也分为前缀...

C语言位运算
应该区分位操作符&、|与逻辑操作符&&、||,后者从左到右的评价一个真值。比如,如果x为1、y为2,那么x & y为0,而x && y为1。移位运算符<<和>>将左侧的操作数左移或者右移右操作数给定的数目,右操作数必须非负。因此x << 2将x的值向左移动两位,用0填充空位;这相当于乘4。右移一...

相似回答