欢迎您访问52IJ教育培训网,今天小编为你分享的52ij作业方面的学习知识是通过网络精心收集整理的:“c语言移位_c语言中为什么左移不分符号数无符号数,而右移分呢?就...”,注意:所整理内容不代表本站观点,如你有补充或疑问请在正文下方的评论处发表。下面是详细内容。
因为在C语言标准中,只规定了无符号数的移位操作是采用逻辑移位(即左移、右移都是使用的逻辑左移和逻辑右移).
而对于有符号数,其左移操作还是逻辑左移,但右移操作是采用逻辑右移还是算术右移就取决于机器了!(算术右移和逻辑右移的区别是:算术右移不右移符号位,即最高位,右移后前补0还是1取决于符号位的值;逻辑右移执行时将移动符号位,右移后前补0)
因此,一个程序如果使用了有符号数的右移位操作,它就是不可移植的了.
其他类似问题
问题1:C语言中无符号数的右移 高位应该补0还是补1?
当然补0啊,补1就是除2再加2的15次方了
问题2:c 语言不太理解说的右移和左移的情况.能举个例子解释下那吗.就是左移动高位低位.右移无符号.负整数c 语言不太理解说的右移和左移的情况.能举个例子解释下那吗.就是左移动高位低位.右
左移时左端高位移出的部分舍弃是啥意思.还有右移时负整数高位补一是啥意思?
正数在存储的时候就是原数字,但是负数要采取补码的方式存储.这样,负数的最高位就是1.比如:对于32位的系统int为四个字节,共32位,数字1就是0xffffffff(即-1的补码,最高位是1).
对于0xffffffff 已经占满的32个位,左移时,高位全部舍去不要,低位补0.比如左移4位就变成 0xfffffff0.但是右移就不一样了,右移时,低位舍去,高位补1,(原来的最高位就是1),所以右移四位还是 0xffffffff ,而不是 0x0fffffff.
问题3:C语言位移(左移右移有无符号)之后可以返回原值么?C语言位移(左移右移有无符号)之后可以返回原值么,请详解,
左移右移并不会改变原值,例如
int a = 1;
a
问题4:C语言 左移 >一个数左移以后,赋值给别的变量,这个数变化了没有,如果再进行一次左移,是对原来的数左移,还是在第一次左移的基础上移动例 a=ox32 (16进制) 0011 0010b=a
左移 右移不会修改a本身
a=ox32 (16进制) 0011 0010
b=a
问题5:C语言左移右移问题.a>>b和b>>a一样吗?如果是a左移b位是不是a
楼主您好,第二问您的理解是对的,ab表示a右移b位,b>>a表示b右移a位,即永远是箭头左侧的数据左移或者右移箭头右侧数据的位数.
希望对楼主理解有帮助.
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
