Redian新闻
>
负数移位是怎么搞的阿
avatar
负数移位是怎么搞的阿# JobHunting - 待字闺中
j*y
1
比如
int a = -1
binary 的表示是
10000000000000000000000000000001
a >> 30 会是多少呢?
avatar
c*a
2
-1是111111.....1111吧? in 2's complement
avatar
j*y
3
对的, 用 2-compliment
不过我试了
int a = -1
a>> 31 和 a>> 30 的输出都是 -1, 不理解

【在 c*****a 的大作中提到】
: -1是111111.....1111吧? in 2's complement
avatar
r*e
4
确实, 但是>>1的时候,left most bit is 0 or 1? 还是说跟编译器相关?
I tried with g++ 4.5.2 in linux, (-1>>1)== -1...所以是补的1 in my case.

【在 c*****a 的大作中提到】
: -1是111111.....1111吧? in 2's complement
avatar
c*a
5
觉得是这样shift的吧
8bits: 1111 1111
-1>>4
1000 0111
avatar
y*g
6
在c++里面是undefined

【在 j*****y 的大作中提到】
: 比如
: int a = -1
: binary 的表示是
: 10000000000000000000000000000001
: a >> 30 会是多少呢?

avatar
a*e
7
在java 和c里面是不一样的
java 里面有>> 和>>>
-1在java中的表示是1取反+1 也就是111111.....11111(32bit)
如果你在java里面>>30 右移30位,前面要全部补1,所以还是111111.....111(32)
但是你可以试试>>>30,右移30位,前面补0,结果就是3了

【在 j*****y 的大作中提到】
: 比如
: int a = -1
: binary 的表示是
: 10000000000000000000000000000001
: a >> 30 会是多少呢?

avatar
s*g
8
in c, sign extension
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。