一个辛苦的工作日我注意到我用通常的.NET 方法生成的GUID在第三个块的开头Guid.NewGuid()有相同的数字4:
efeafa5f-fe21-4ab4-ba82-b9eefd5fa225
480b64d0-6762-4afe-8496-ac7cf3292898
397579c2-a4f4-4611-9fda-16e9c1e52d6a
...
Run Code Online (Sandbox Code Playgroud)
屏幕上每隔一秒出现一次.在第五个GUID之后,我一直关注这个模式.最后,最后一个内部有相同的四位,我认为我是一个幸运的人.我回到家,觉得整个世界都为我这样一个特殊的人开放.下周我找到了一份新作品,打扫了我的房间并打电话给我的父母.
但今天我又面临同样的模式.千倍.我不再感受到选择的了.
我用谷歌搜索了它,现在我知道了UUID和一个规范格式,有4个保留位version和2个用于variant.
这是一个试验片段:
static void Main(string[] args)
{
while (true)
{
var g = Guid.NewGuid();
Console.WriteLine(BitConverter.ToString(g.ToByteArray()));
Console.WriteLine(g.ToString());
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
但仍然有一件事我不明白(除了如何继续生活).为什么我们需要这些保留位?我看到它会如何伤害 - 暴露内部实施细节,更多碰撞(仍然无需担心,但有一天......),更多的自杀 - 但我没有看到任何好处.你能帮我找到吗?

我正在尝试将字节数组转换为 BitSet。以下是我正在使用的代码:
public BitSet byteToBits(byte[] bytearray){
BitSet returnValue = new BitSet(bytearray.length*8);
ByteBuffer byteBuffer = ByteBuffer.wrap(bytearray);
//System.out.println(byteBuffer.asIntBuffer().get(1));
//Hexadecimal values used are Big-Endian, because Java is Big-Endian
for (int i = 0; i < bytearray.length; i++) {
byte thebyte = byteBuffer.get(i);
for (int j = 0; j <8 ; j++) {
returnValue.set(i*8+j,isBitSet(thebyte,j));
}
}
return returnValue;
}
private static Boolean isBitSet(byte b, int bit)
{
return (b & (1 << bit)) != 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 JUnit 测试对其进行测试,如下所示。
@org.junit.Test
public void byteToBits() throws …Run Code Online (Sandbox Code Playgroud) 好奇,如果有人可能对如何对二进制数进行以下操作有一些见解:
兑换
01+0 -> 10+1 (+ as in regular expressions, one or more)
01 -> 10
10 -> 01
Run Code Online (Sandbox Code Playgroud)
所以,
10101000010100011100
01010100101010100010
Run Code Online (Sandbox Code Playgroud)
并澄清这不是一个简单的反转:
000000100000000000
000001010000000000
Run Code Online (Sandbox Code Playgroud)
我正在考虑正则表达式,但我正在使用二进制数,并希望保持这种状态.这个讨厌的黑客页面也没有给我任何见解.这显然具有细胞自动机的一些本质.那么,任何人都有一些可以解决这个问题的操作吗?(不需要代码,我知道该怎么做).
我正在favicon.ico编写一个脚本,我需要知道可能的最大位数.
有些数字不能存储在"存储位"中,因为它们的二进制表示会使它们无休止地存在.
在二进制11.111011101110中......这不是确切的数字.我不记得到底是什么.
但我们可以认为它在我们的基数10中"像一个无理数",在小数点后无限地继续.
当转换为基数2时,一些有理数的数字会面临这个问题.那么我们如何......
1)代表他们?
2)用计算机程序计算它们?
3)对它们进行操作?
编辑:删除混乱并说谢谢:
好吧,我在上面的帖子中说 - >查看它或者认为它像一个不合理的或一个长到十几位的数字.请阅读"喜欢"这个词.
现在我有一个数字0.2,这个简单的数字不能用二进制形式表示.那么如何对它进行操作.
其他问题仍未解决.
我只想提一下我对这里人们的信念:
那么去"库"或大约存储不是堆栈溢出的极客的答案,因为它们是某些应用程序,其中重要的是拥有数字.
好吧,我可以找到许多大整数库,但它们适用于除VB.NET之外的所有编程语言.有没有人知道Visual Basic .NET的类/库可以处理非常大的数字?(我想处理1024位甚至更多位).唯一的计算支持我需要它添加,替换,乘法,除法和舍入.
与此代码一起使用是很好的:
Dim Letterz() As Integer = {33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, …Run Code Online (Sandbox Code Playgroud) 关于BigInteger大小的表示,BigInteger类的源代码必须说明这一点:
这个BigInteger的大小,以big-endian顺序:这个数组的第0个元素是幅度最重要的int.幅度必须是"最小的",因为最重要的int(mag [0])必须是非零的.这对于确保每个BigInteger值只有一个表示是必要的.请注意,这意味着BigInteger零具有零长度磁盘阵列.
在这种情况下,最小的幅度是什么意思?同时如何使最显著INT非零确保恰好每一个代表BigInteger的价值?
如何将存储在a中的一系列32位(表示4个字节)NSString转换为NSDataobjective-c中的4个字节的对象?
例如,如何转换以下字符串:
NSString *bitSeries = @"00000000000000000000000111101100";
Run Code Online (Sandbox Code Playgroud)
进入NSData长度恰好为4的物体?
搜索了postgresql文档http://www.postgresql.org/docs/8.4/interactive/functions-bitstring.html,了解有关将位变换为整数的信息
但无法找到任何信息.
select '011111'::bit(4)::varbit(4)::integer as varbit
Run Code Online (Sandbox Code Playgroud)
感谢您的回复.
有人可以解释为什么我在按位或两个数字时得到这个结果?我真的很困惑.
signed char signedChar = -64; // This is now -64, or 1100 0000
unsigned char unsignedChar = signedChar; // This is now 196, or 1100 0000 (The same)
short signedShort = 0; // This is now 0000 0000 0000 0000
signedShort |= signedChar; // This is now -64, not 196
Run Code Online (Sandbox Code Playgroud)
我预计会发生这种情况,我或者签署了短期签署的协议,这是:
0000 0000 0000 0000 or'ed with
1100 0000
0000 0000 1100 0000 result
equalling 196.
Run Code Online (Sandbox Code Playgroud)
但相反,我得到了-64
为什么这个OR操作在开头添加一个?我完全期待不同的东西.
谢谢.