【发布时间】:2010-12-05 19:00:18
【问题描述】:
我正在测试 BigIntegers。
当我取一个大的奇数除以 2 时,我得到一个整数作为 anwser,没有任何迹象表明它不能精确地除这个数。
所以第一个问题是我怎么知道两个数字完全除。
然后我用一个小数字测试了它,这个代码:
string myNumberAsString = "25";
System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();
byte[] myNumberAsByteArray = encoding.GetBytes(myNumberAsString);
BigInteger myNumber = new BigInteger(myNumberAsByteArray);
Console.WriteLine(myNumber / 2);
给出的结果是 6809。有人知道为什么或者可以看到我的代码有什么问题吗?
我正在使用 BigInteger 的 .net 4.0 实现
【问题讨论】:
-
我不认为编码为 UTF8 会给你一个代表数字 25 的字节数组?
-
6809 十六进制是 0x1A99,正好是 0x3532 的一半。字符串中字符的 ASCII 码(UTF-8 对 ASCII 范围内的字符使用 ASCII 码)是 0x32 和 0x35,由于 little-endian 字节顺序,它们变为 0x3532。所以你的“大整数”并不奇怪,除法会给你正确的结果。
标签: c# .net-4.0 biginteger