我发现compareTo方法的java.lang.Integer实现如下所示: public int compareTo(Integer anotherInteger) { int thisVal = this.value; int anotherVal = anotherInteger.value; return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1)); } 问题是为什么使用比较而不是减法: return thisVal – anotherVal;
我试图计算p1 =(1/1) (1/2) … *(1 / n),但是有些地方是错误的,printf给了我0.000 … 0 #include <stdio.h> int main(void) { int i,num; float p3; do { printf ("give number N>3 : \n" ); scanf( "%d", &num ); } while( num <= 3 ); i = 1; p3 = 1; do { p3=p3*(1/i); printf( "%f\n",p3 ); } while ( i <= num […]
可能重复: Python“是”运算符意外地用整数行为 今天,我试图debugging我的项目,经过几个小时的分析,我得到了这个: >>> (0-6) is -6 False 但, >>> (0-5) is -5 True 你能向我解释一下,为什么? 也许这是某种错误或非常奇怪的行为。 > Python 2.7.3 (default, Apr 24 2012, 00:00:54) [GCC 4.7.0 20120414 (prerelease)] on linux2 >>> type(0-6) <type 'int'> >>> type(-6) <type 'int'> >>> type((0-6) is -6) <type 'bool'> >>>
我正在寻找一个function,将标准的IPv4地址转换为一个整数。 奖金积分可用于相反的function。 解决scheme应该在C#中。
Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 2/2 1.0 这是打算? 我强烈记得早期版本返回int/int=int ? 我应该怎么做,是否有一个新的分工操作员,或者我必须总是施放?
在python或标准库中是否有一个整数平方根? 我希望它是确切的(即返回一个整数),并且如果没有解决scheme就叫。 此刻,我推出了自己的天真的一个: def isqrt(n): i = int(math.sqrt(n) + 0.5) if i**2 == n: return i raise ValueError('input was not a perfect square') 但是这很丑,我不太相信大整数。 如果我超过了这个值,我可以遍历这些方块并放弃,但是我认为这样做会有点慢。 另外我想我可能会重新发明轮子,像这样的东西一定存在于Python已经…
有没有什么办法来判断一个string是否代表一个整数(例如'3' , '-17'而不是'3.14'或'asfasfas' )而不使用try / except机制? is_int('3.14') = False is_int('-7') = True
为什么Java不包含对无符号整数的支持? 在我看来,这是一个奇怪的遗漏,因为它们允许编写不太可能在意外大的input上产生溢出的代码。 此外,使用无符号整数可以是一种自我logging的forms,因为它们表明无符号整数打算保存的值永远不应该是负值。 最后,在某些情况下,无符号整数可以更有效地执行某些操作,例如除法。 包括这些的缺点是什么?
在汇编编程中,通常需要从寄存器的低位计算某些值,而不保证其他位为零。 在像C这样的高级语言中,只需简单地将input转换为较小的大小,然后让编译器决定是否需要单独清零每个input的高位,或者是否可以在结束之后剔除结果的高位事实。 对于x86-64(也就是AMD64)来说,这是非常常见的,原因有很多,其中一些出现在其他ISA中。 我将用64位x86作为例子,但其目的是一般性地询问/讨论2的补码和无符号的二进制算术,因为所有现代的CPU都使用它 。 (请注意,C和C ++不保证二进制补码4 ,并且这个有符号溢出是未定义的行为。) 作为例子,考虑一个可以编译成LEA指令的简单函数2 。 (在x86-64 SysV(Linux) ABI 3中 ,前两个函数参数在rdi和rsi ,返回值是rax , int是32位types。 ; int intfunc(int a, int b) { return a + b*4 + 3; } intfunc: lea eax, [edi + esi*4 + 3] ; the obvious choice, but gcc can do better ret gcc知道,即使是负符号整数,除了从右到左,input的高位不会影响进入eax 。 因此, 它保存了一个指令字节并使用 lea […]
任何人都可以打败我的整数的性能std ::string代码,下面链接? 已经有几个问题解释了如何在C ++中将整数转换为std::string ,比如这个 ,但是没有一个提供的解决scheme是有效的。 下面是一些编译就绪的代码,用于与一些常见的方法进行竞争: 使用stringstream的“C ++方法”: http : //ideone.com/jh3Sa sprintf,这是SO-ers通常推荐的性能意识: http : //ideone.com/82kwR 与stream行的观点相反, boost::lexical_cast有它自己的实现( 白皮书 ),不使用stringstream和numeric插入操作符。 我真的很希望看到它的performance比较,因为这个问题表明它是悲惨的 。 和我自己的贡献一样,这在台式计算机上是有竞争力的,并且演示了一种在embedded式系统上也可以全速运行的方法,与依赖于整数模的algorithm不同: 本的algorithm: http : //ideone.com/SsEUW 如果你想使用这个代码,我会在一个简单的BSD许可下使用它(允许商业使用,需要归属)。 请问。 最后,函数ltoa是非标准的,但广泛可用。 ltoa版本,对于任何有编译器的人来说(ideone没有): http ://ideone.com/T5Wim 我会尽快发表我的performance测量作为答案。 algorithm规则 提供将至less32位有符号和无符号整数转换为十进制的代码。 将输出生成为std::string 。 没有与线程和信号不兼容的技巧(例如,静态缓冲区)。 您可以假设一个ASCII字符集。 确保在绝对值无法表示的二进制补码机上testingINT_MIN上的代码。 理想情况下,输出应该是character-for-character与使用stringstream的规范C ++版本相同的,但是也可以通过http://ideone.com/jh3Sa来理解,因为正确的数字也是可以理解的。 新 :虽然你可以使用任何编译器和优化器的选项(除了完全禁用),你需要进行比较,至less在VC ++ 2010和g ++下,代码也需要编译并给出正确的结果。 希望讨论 除了更好的algorithm之外,我还想在几个不同的平台和编译器上获得一些基准(让我们使用MB / s吞吐量作为我们的标准测量单位)。 我相信我的algorithm的代码(我知道sprintf基准testing使用了一些快捷方式 – 现在已经修复了)是标准定义好的行为,至less在ASCII假设下是这样,但是如果您看到任何未定义的行为或input输出无效,请指出。 […]