作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/29 02:17:18
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。
再问: 哦哦。明白了