📣 4th of July限时特惠: VIP通行证立减$68
查看: 1259| 回复: 3
跳转到指定楼层
上一主题 下一主题
收起左侧

[学Java/C#] >>> 和 >> 具体的差别。例子

头像被屏蔽
提示: 作者被禁止或删除 内容自动屏蔽

上一篇:关于1_000_000_007
下一篇:LeetCode 938 一个tricky的地方
lalxyy 2020-4-30 06:26:02 | 只看该作者
全局:
我不是做底层的,如果有大佬路过还希望轻喷。
-

以下假设当前的计算机是8 bit的,也就是一个整数在计算机里用8个bit(0或1)表示.

我们先说负数是怎样表示的。目前主流平台都采用2's complement作为负数的表示方法,其中complement是补码(即对于全部bit取反)的意思。
也就是对于任意一个整数a,对于其相反数b(也就是数学意义上的 a = -b),2's complement保证a和b的二进制表示值相加等于2的8次方(256)。

举一个例子:
整数5用8个bit来表示就是0000 0101,那么根据上面的定义,整数-5的二进制表示值和0000 0101相加应该会得到1 0000 0000.
如果我们把0000 0101取按位非(not),会得到1111 1010.
我们再把1111 1010加一个1,会得到1111 1011.
把0000 0101和1111 1011相加一下会得到1 0000 0000,也就是上面我们说的那个数。
据此,1111 1011定义为-5的二进制表示,所有大于0的自然数通过取not加1都可以得到它的相反数的二进制表达。

8位bit表示的数字范围是-128到127,因为2的 (8-1) 次方等于128,最高位要作为符号位(0表示正数,1表示负数)。
有符号右移会保留这个数的正负。例如1111 1011(-5),有符号右移会得到1111 1101(-3),最右侧少了个1,最左侧补了个1. 因为保留正负,所以也叫arithmetic operation. 可以用来快速计算除以2的结果。
无符号右移不保留这个数的正负。例如1111 1011(-5),无符号右移会得到0111 1101(125),最右侧少了个1,最左侧补了个0.

评分

参与人数 4大米 +6 收起 理由
yeehaah + 2 很棒, 学到了新东西!
Fendapig + 1 赞一个
illusion7 + 1 很有用的信息!
reanrean1 + 2 cmu 15213 hhhh

查看全部评分

回复

使用道具 举报

🔗
reanrean1 2020-4-30 11:35:27 | 只看该作者
全局:
lalxyy 发表于 2020-4-29 17:26
我不是做底层的,如果有大佬路过还希望轻喷。
-
cmu 15213 hhhh
回复

使用道具 举报

🔗
阿钟 2020-5-1 06:20:19 | 只看该作者
全局:
Edsger.X 发表于 2020-5-1 05:05
这个课你上过吗?

15213基本就是csapp
回复

使用道具 举报

🔗
yeehaah 2020-5-3 01:31:08 | 只看该作者
全局:
lalxyy 发表于 2020-4-30 06:26
我不是做底层的,如果有大佬路过还希望轻喷。
-
很棒, 学到了新东西!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表