当前位置: 首页 > 面试题库 >

最快的Java登录方式?

经清野
2023-03-14
问题内容

我想将float值的符号int表示为-1或1。

避免使用条件总是减少计算成本的好主意。例如,我可以想到的一种方法是使用快速bit-shift获取符号:

float a = ...;
int sign = a >> 31; //0 for pos, 1 for neg
sign = ~sign; //1 for pos, 0 for neg
sign = sign << 1; //2 for pos, 0 for neg
sign -= 1; //-1 for pos, 1 for neg -- perfect.

或更简而言之:

int sign = (~(a >> 31) << 1) - 1;
  1. 这似乎是个好方法吗?
  2. 考虑到字节顺序问题(因为MSB保持签名),这将适用于所有平台吗?

问题答案:

您不简单使用的任何原因:

int sign = (int) Math.signum(a); //1 cast for floating-points, 2 for Integer types

另外,大多数Number实现都有一个signum方法,该方法采用该类型的原语并返回一个int,因此可以避免强制转换以提高性能。

int sign1 = Integer.signum(12); //no casting
int sign2 = Long.signum(-24l); //no casting

它将返回+1 / 0 / -1,并且已经过优化以提供良好的性能。

作为参考,您可以看一下openJDK中的实现。相关位是:

public static float signum(float f) {
    return (f == 0.0f || isNaN(f)) ? f : copySign(1.0f, f);
}

public static boolean isNaN(float f) {
    return (f != f);
}

public static float copySign(float magnitude, float sign) {
    return rawCopySign(magnitude, (isNaN(sign) ? 1.0f : sign));
}

public static float rawCopySign(float magnitude, float sign) {
    return Float.intBitsToFloat((Float.floatToRawIntBits(sign)
            & (FloatConsts.SIGN_BIT_MASK))
            | (Float.floatToRawIntBits(magnitude)
            & (FloatConsts.EXP_BIT_MASK
            | FloatConsts.SIGNIF_BIT_MASK)));
}

static class FloatConsts {
    public static final int SIGN_BIT_MASK = -2147483648;
    public static final int EXP_BIT_MASK = 2139095040;
    public static final int SIGNIF_BIT_MASK = 8388607;
}


 类似资料:
  • 问题内容: 我有一张表: 如果为is ,则表示该用户当前具有该计划。 我想查询的是:(a)他当前正在使用的计划,或(b)他所参与的最新计划。对于每个给定的用户,我只需要返回一行。 现在,我设法通过使用联合和子查询做到了这一点,但是碰巧表很大,而且效率不高。你们中的每个人都可以有一种更快的查询方式吗? 谢谢, [编辑]多数答案在这里返回单个值。那是我的坏事。我的意思是为每个用户返回一个值,但一次返回

  • 问题内容: 我的Web应用程序使用会话来存储有关用户登录后的信息,并在用户在应用程序中逐页浏览时维护该信息。在这个特定的应用程序,我存储,和人的。 我想在登录时提供“保持登录状态”选项,该选项会将cookie在用户的计算机上放置两周,当他们返回应用程序时,将使用相同的详细信息重新开始会话。 这样做的最佳方法是什么?我不想将其存储在cookie中,因为这似乎会使一个用户更容易伪造另一位用户的身份。

  • 本文向大家介绍electron实现qq快捷登录的方法示例,包括了electron实现qq快捷登录的方法示例的使用技巧和注意事项,需要的朋友参考一下 之前本来想不写这个功能的,结果客户死活要qq登录! 实在没办法就写了,顺便写个文章! 在写之前有两个问题: 1: 打开qq授权页面点击页面中的链接会又打开一个页面! ..... 2: 授权之后是否成功很难去判断 不过脑海中有一个想法就是,electro

  • 问题内容: 我想要用Java开发ORKUT(http://www.ORKUT.com)主页的pagesource 。 但是在访问任何页面之前,需要先登录到ORKUT。我该怎么做。它不应介于两者之间 问题答案: 您应该看看Commons HTTP Client 。使用它,您可以发送带有登录数据的POST请求,然后使用会话ID进行进一步处理。

  • 读取用户登陆信息 调用地址 https://secure.bilibili.tv/login 参数 字段 必选 类型 说明 api true string 申请时填入的API地址 appkey true string 申请时系统提供的Key sign true string 校验密钥 md5(“api=“) 回调 编码为UTF-8 返回值字段 字段类型 字段说明 mid int 会员编号 unam

  • 1.如何获取APPID和APPSECRET这两个参数? 1.需登录微信开放平台配置,具体可参考使用手册。 2.申请QQ互联申请链接 2.升级以后,微信浏览底部图标不显示,应该检查哪里? 后台店铺手机端底部导航设置