int(INT32)32 位整数, long(INT64)64 位整数32位指的是CPU的位数32位?那long(INT64) 的64位 比32位有什么本质区别呢?

解决方案 »

  1.   

    是指数据宽度,和cpu没关系
    显然long比int的精度要高
    就是最大值最小值的范围比int大
      

  2.   

    是指用32位长度,就是4个字节来存储数据,还是8个字节。不是cpu的位数。
      

  3.   

    32位cpu和64位cpu不影响变量长度,只影响指针长度,32位cpu下,地址范围也就是32位,所以指针是32/8=4,64位的指针长度是16。
      

  4.   

    int 是4个字节,32位
    long是8个字节。
      

  5.   

    int 32位 4字节? long 64位 8字节?感觉晕乎乎的......一看见32位呃64位老是会联想到cpu的位数.......真是纠集啊...
      

  6.   

    C#的数值是固定宽度的,与CPU无关。也就是说,无论32位机器还是64位机器,Int32的宽度都一样。同理,Int64的宽度也与机器无关。所以,在32位机器上使用Int64的类型,会有无法预料的后果。"在 32 位 Intel 计算机上分配 64 位值不是原子操作;即该操作不是线程安全的。这意味着,如果两个人同时将一个值分配给一个静态 Int64 字段,则该字段的最终值是无法预测的。"----MSDN
    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);
        }
    }