c 语言不太理解说的右移和左移的情况。能举个例子解释下那吗。就是左移动高位低位。右移无符号。负整数

c 语言不太理解说的右移和左移的情况。能举个例子解释下那吗。就是左移动高位低位。右移无符号。负整数的情况。不明白在说啥⊙﹏⊙

  左移时左端高位移出的部分舍弃是啥意思。还有右移时负整数高位补一是啥意思??

  解答:正数在存储的时候就是原数字,但是负数要采取补码的方式存储。这样,负数的最高位就是1。比如:对于32位的系统int为四个字节,共32位,数字1就是0xffffffff(即-1的补码,最高位是1)。
  对于0xffffffff 已经占满的32个位,左移时,高位全部舍去不要,低位补0.比如左移4位就变成 0xfffffff0。但是右移就不一样了,右移时,低位舍去,高位补1,(原来的最高位就是1),所以右移四位还是 0xffffffff ,而不是 0x0fffffff。追问

看不明白(⊙﹏⊙)

追答

好吧!! 移位是对二进制而言的。二进制你该知道吧!
我们先拿8位的数字作为例子。
数字1是:0000 0001,
左移就是所有位向左移一位,可是数字 0000 0001 只有8个位,那么最左边的(也就是高位)移就移出去了,就舍弃;最低位右边又没有数字,我们默认最低位右边往左移一个0.就变成 0000 0010,都往左移啊!
右移就是所有位向右移一位,数字0000 0001 往右移动,那么最右边(就是最低位)的1就移出去了,只能舍去;最高位左边没有数字,但是这是个正数,就移动一个0,就变成 0000 0000。
数字-1 二进制就是 1111 1111 (为什么-1是这个1111 1111你要是不知道就先去查查资料),
左移是一样的最左边往左移动舍去,最右边往左移动个0 就变成 1111, 1110。
右移最右边往右移动舍去,最左边往左移动时,由于这是负数,就移动1,所以右边的1舍去,但是左边补的还是1,所以右移一位 还是1111 1111。

追问

哦哦。明白了

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-03-18
1>> 就是0001 右移位 变成 0000 就变成0了
1<< 就是0001 左移位 变成0010 变成2 了追问

那左移右端低位补0左端高位移除部分舍弃是啥意思

追答

就是左移的时候右边补零

1>
0001
0000这不是舍弃了吗

追问

左移时左端高位移出的部分舍弃是啥意思。还有右移时负整数高位补一是啥意思

追答

1010 0101>1

1111 1010这个是负数最左边位要一直为1

第2个回答  2014-03-18
唉,你这是干啥呢?追问

我在问问题>"<|||

追答

你也在百度知道注册了。。。

搞错了,不好意思

c 语言不太理解说的右移和左移的情况。能举个例子解释下那吗。就是...
解答:正数在存储的时候就是原数字,但是负数要采取补码的方式存储。这样,负数的最高位就是1。比如:对于32位的系统int为四个字节,共32位,数字1就是0xffffffff(即-1的补码,最高位是1)。对于0xffffffff 已经占满的32个位,左移时,高位全部舍去不要,低位补0.比如左移4位就变成 0xfffffff0...

例子解释下那吗.就是左移动高位低位.右移无符号
字节移位指令一共有四个循环右移、循环左移、右移、左移循环移位指令(左、右)八个位是循环移动的也就是说循环左移1位就是向左移动1位 最高位移到最低位处循环右移1位相应的位向右移动1位最低位移到最高位例如:11000010 》》》循环右移1位》》》01100001 11000010 》》》循环左移1位》...

c语言中的左调整和右调整是什么意思?
总之,在C中,左移是逻辑\/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左\/右移做快速的乘\/除运算,这样会比循环效率高很多.

c语言中的右移和左移有什么区别吗?
右移一位相当于除以2。例:5>>1 5的二进制表示是101,那么右移一位之后是10就是2了,是整除的;左移的话就是在后面补一个零,相当于是乘以二,那么变成了1010,十进制是10。101右移,就是把最后一位拿掉了,是10这个是二进制的,十进是2,5\/2本来是小数,但这里是整数操作的,所以把小数...

C语言左位移运算符和右位移运算符是什么意思,怎么运算,举个例子..
就是把一个数转化成二进制再直接对他进行操作 例如:45>>2 \/\/45右移两位 45的二进制为:101101 右移两位就为: 001011 001011再转化为十进制为:11 所以45>>2= 11 左移运算符 45<<2 45的二进制为:101101 左移两位就为:10110100 10110100再转化为十进制为:180 所以45<<2=180 ...

...指令用c语言分别怎么表达吗?能举个例子吗?先谢啦~
可见左操作数是被操作的对象,右操作数是位移的位数。一般来说我们在C51中都是对unsigned char类型进行位操作,所以移出的位都是补0(如果是对有符号整数>>,最高位也即符号位会保持不变),因此C语言在这方面能够实现的不如汇编。当然你可以如楼上所说联合编程,也可以在C语言函数中直接插入汇编语句...

c语言中的>>和<<分别是什么意思啊?
C语言中的>>和<<分别是左移运算符和右移运算符,用于整数在二进制形式的移位运算。1、左移运算符(<<)规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。语法格式:需要移位的数字 << 移位的次数,例如: 3 << 2,则是将数字3左移2位。数学意义:在数字...

C语言中怎样表示移位啊?例如将某个值左移两位
利用位操作:"<<"就是左移 ">>"就是右移 举个例子:将a左移2位,然后赋给a a<<=2 也即是a=a<<2 在C语言中左移1位,相当于乘2,右移相当于除2。

C \/ C ++中的左移和右移运算符
左移1(如 1 << 1)和右移1(如 1 >> 1)的运算结果,对于正数,分别等于2的幂次方乘以第一个数和第一数除以2的幂次方。这在正数的位移情况下是有效的。总的来说,左移和右移运算符在C \/ C++中是基础且重要的,但必须谨慎使用,以避免潜在的数值不稳定性。在实际编程中,理解这些运算符...

c语言中位运算的左位移右位移都是什么意思
移位时,移出的位数全部丢弃,移出的空位补入的数与左移还是右移花接木有关。如果是左移,则规定补入的数全部是0;如果是右移,还与被移位的数据是否带符号有关。若是不带符号数,则补入的数全部为0;若是带符号数,则补入的数全部等于原数的最左端位上的原数(即原符号位)。具体移位规则如下...

相似回答