c#的int和long的位数问题!! int(INT32)32 位整数, long(INT64)64 位整数32位指的是CPU的位数32位?那long(INT64) 的64位 比32位有什么本质区别呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是指数据宽度,和cpu没关系显然long比int的精度要高就是最大值最小值的范围比int大 是指用32位长度,就是4个字节来存储数据,还是8个字节。不是cpu的位数。 32位cpu和64位cpu不影响变量长度,只影响指针长度,32位cpu下,地址范围也就是32位,所以指针是32/8=4,64位的指针长度是16。 int 是4个字节,32位long是8个字节。 int 32位 4字节? long 64位 8字节?感觉晕乎乎的......一看见32位呃64位老是会联想到cpu的位数.......真是纠集啊... C#的数值是固定宽度的,与CPU无关。也就是说,无论32位机器还是64位机器,Int32的宽度都一样。同理,Int64的宽度也与机器无关。所以,在32位机器上使用Int64的类型,会有无法预料的后果。"在 32 位 Intel 计算机上分配 64 位值不是原子操作;即该操作不是线程安全的。这意味着,如果两个人同时将一个值分配给一个静态 Int64 字段,则该字段的最终值是无法预测的。"----MSDNclass Program{ public static Int64 UnsafeSharedData; public static Int64 SafeSharedData; static void Main(string[] args) { Action<Int32> unsafeAdd = i => { UnsafeSharedData += i; }; Action<Int32> unsafeSubtract = i => { UnsafeSharedData -= i; }; Action<Int32> safeAdd = i => Interlocked.Add(ref SafeSharedData, i); Action<Int32> safeSubtract = i => Interlocked.Add(ref SafeSharedData, -i); WaitHandle[] waitHandles = new[] { new ManualResetEvent(false), new ManualResetEvent(false), new ManualResetEvent(false), new ManualResetEvent(false)}; Action<Action<Int32>, Object> compute = (a, e) => { for (Int32 i = 1; i <= 1000000; i++) { a(i); Thread.Sleep(0); } ((ManualResetEvent) e).Set(); }; ThreadPool.QueueUserWorkItem(o => compute(unsafeAdd, o), waitHandles[0]); ThreadPool.QueueUserWorkItem(o => compute(unsafeSubtract, o), waitHandles[1]); ThreadPool.QueueUserWorkItem(o => compute(safeAdd, o), waitHandles[2]); ThreadPool.QueueUserWorkItem(o => compute(safeSubtract, o), waitHandles[3]); WaitHandle.WaitAll(waitHandles); Debug.WriteLine("Unsafe: " + UnsafeSharedData); Debug.WriteLine("Safe: " + SafeSharedData); }} C# 如何禁止word关闭? GridView导出Excel数据为空,紧急求助 目录不存在 C#如何获取本地的网卡信息(不是网卡地址) 如何通过其他程序修改 Exe的已知控件名的text 使用C# Socket 发送结构体协议包,应该使用那个方法,help 那位高手把这段VB代码改为C#代码,万分感谢,急救! c#怎么使弹出窗口置顶 DataGridView异常:列的 FillWeight 值总和不能超过 65535 c# 新手求助:自动登录论坛 坐等 winform 部署高手 winform 拖拽与mouseup疑问
显然long比int的精度要高
就是最大值最小值的范围比int大
long是8个字节。
class Program
{
public static Int64 UnsafeSharedData;
public static Int64 SafeSharedData; static void Main(string[] args)
{
Action<Int32> unsafeAdd = i => { UnsafeSharedData += i; };
Action<Int32> unsafeSubtract = i => { UnsafeSharedData -= i; };
Action<Int32> safeAdd = i => Interlocked.Add(ref SafeSharedData, i);
Action<Int32> safeSubtract = i => Interlocked.Add(ref SafeSharedData, -i); WaitHandle[] waitHandles = new[] { new ManualResetEvent(false),
new ManualResetEvent(false),
new ManualResetEvent(false),
new ManualResetEvent(false)}; Action<Action<Int32>, Object> compute = (a, e) =>
{
for (Int32 i = 1; i <= 1000000; i++)
{
a(i);
Thread.Sleep(0);
} ((ManualResetEvent) e).Set();
}; ThreadPool.QueueUserWorkItem(o => compute(unsafeAdd, o), waitHandles[0]);
ThreadPool.QueueUserWorkItem(o => compute(unsafeSubtract, o), waitHandles[1]);
ThreadPool.QueueUserWorkItem(o => compute(safeAdd, o), waitHandles[2]);
ThreadPool.QueueUserWorkItem(o => compute(safeSubtract, o), waitHandles[3]); WaitHandle.WaitAll(waitHandles);
Debug.WriteLine("Unsafe: " + UnsafeSharedData);
Debug.WriteLine("Safe: " + SafeSharedData);
}
}