推荐:数据科学课程和书籍清单以及培训讲座


一亩三分地论坛

 找回密码
 获取更多干活,快来注册

一亩三分地官方iOS手机应用下载
查看: 503|回复: 10
收起左侧

微软OTS 这题求解 写java的人表示不懂???

[复制链接] |试试Instant~ |关注本帖
m1n2b3v4 发表于 2017-8-1 16:06:37 | 显示全部楼层 |阅读模式

2017(7-9月) 码农类 硕士 全职@Microsoft - 猎头 - 在线笔试 |Other在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干活,快来注册

x
有没有写c++的来解答一下~~

题目

题目
GUIXIANG 发表于 2017-8-1 18:23:50 | 显示全部楼层
同关注, 求解释
回复 支持 反对

使用道具 举报

edisonshen 发表于 2017-8-1 21:53:12 | 显示全部楼层
我觉得是 sizeof(int)是根据system内部计算的,compiler不同或者机器不同就会不一样,如果replaced with 8,意思就是不管什么机器结果都是一样的。 循环内容我觉得没什么意义

补充内容 (2017-8-1 21:55):
我也是写java,所以不确定对不对,但是一搜sizeof(int), stackoverflow上都是讨论类似的
回复 支持 反对

使用道具 举报

flygogogo 发表于 2017-8-1 22:24:34 | 显示全部楼层
感觉循环是把一个int的bits反序, sizeof(int)是因为16位机上int是16bits, 32/64位机上int是32bits这样可以保证所有的bits都被翻转. 如果是8那么固定只翻转低8bits
回复 支持 反对

使用道具 举报

 楼主| m1n2b3v4 发表于 2017-8-2 01:48:31 | 显示全部楼层
flygogogo 发表于 2017-8-1 22:24
感觉循环是把一个int的bits反序, sizeof(int)是因为16位机上int是16bits, 32/64位机上int是32bits这样可以 ...

我当时也有考虑这个,可是input是integer,它是直接%2除2,并没有换成bits。java 最大的数字是10位数,再多就overflow啦?所以传进来也不可能10101010100101吧?
回复 支持 反对

使用道具 举报

 楼主| m1n2b3v4 发表于 2017-8-2 01:48:54 | 显示全部楼层
edisonshen 发表于 2017-8-1 21:53
我觉得是 sizeof(int)是根据system内部计算的,compiler不同或者机器不同就会不一样,如果replaced with  ...

这个我也搜出来了,可是它第一问问的是这个function在干嘛-__-,悲剧
回复 支持 反对

使用道具 举报

bearicc 发表于 2017-8-2 02:19:32 | 显示全部楼层
m1n2b3v4 发表于 2017-8-2 01:48 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
我当时也有考虑这个,可是input是integer,它是直接%2除2,并没有换成bits。java 最大的数字是10位数,再 ...

%2 就是得到最后一个bit, /2 就是往右shift1位,for 就是计算32次,所以就是reverse bits of 32 bit integer.

补充内容 (2017-8-2 02:21):
准确说是reverse sizeof(int)*8 位的integer bits.
回复 支持 反对

使用道具 举报

dudufish 发表于 2017-8-2 02:21:13 | 显示全部楼层
m1n2b3v4 发表于 2017-8-2 01:48.鐣欏璁哄潧-涓浜-涓夊垎鍦
我当时也有考虑这个,可是input是integer,它是直接%2除2,并没有换成bits。java 最大的数字是10位数,再 ...

是reverse给定整数的bit。不停地除2就是把整数不停的右移,%2就是取最右的那个bit位。
回复 支持 反对

使用道具 举报

realhly88 发表于 2017-8-2 02:25:14 | 显示全部楼层
字面上看是按bit翻转一个int,但是方程本身没有处理符号位,而且也不是用移位操作而是算术操作,所以不是完全的翻转,有很大问题。

把sizeof 改成8之后,就成了返回正的,翻转前八位bit。
回复 支持 反对

使用道具 举报

 楼主| m1n2b3v4 发表于 2017-8-2 02:25:49 | 显示全部楼层
bearicc 发表于 2017-8-2 02:19. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
%2 就是得到最后一个bit, /2 就是往右shift1位,for 就是计算32次,所以就是reverse bits of 32 bit int ...

你这么一说我突然懂了,感谢~
回复 支持 反对

使用道具 举报

 楼主| m1n2b3v4 发表于 2017-8-2 02:26:09 | 显示全部楼层
dudufish 发表于 2017-8-2 02:21. 鍥磋鎴戜滑@1point 3 acres
是reverse给定整数的bit。不停地除2就是把整数不停的右移,%2就是取最右的那个bit位。

谢谢!懂了!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2017-8-22 11:40

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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