Q:

Why Int64 and UInt64 are of same size

I'm asking in context of C#. Why both Int64 and UInt64 are of same size i.e. 64-bits. Same goes to other Int variables also.
I was expecting UInt to be smaller in size at least a bit as it do not need to represent the - sign, am I expecting some illogical thing here?

A:

The 64 in Int64 and UInt64 means the size of the integer is 64 bits. That's why they are the same size.
The size is the same, but range is different (also due to the significant bit):

UInt64: 0 to 18,446,744,073,709,551,615;
Int64: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807.

A:

It all comes down to what the most significant bit is used for. In signed data it indicates the sign; in unsigned data it is just another bit. This means that unsigned data can represent values twice as large in magnitude, but only represent positive values (and zero) - for example, in the case of 64-bits, unsigned values are 0 to 18,446,744,073,709,551,615 - where-as signed values are -9,223,372,036,854,775,808 thru 9,223,372,036,854,775,807.
It is easier to see for 8-bit: -128 to 127 versus 0 to 255. The number of possible values is identical.

A:

The fundamental reason is that modern CPUs are 64-bit ones.
So it's far more easier to implement
  64-bit integer - one CPU register  (say RAX)
  32-bit integer - half CPU register (EAX)
  16-bit integer - 1/4 (AX)
   8-bit integer - 1/8 (AH)

otherwise (for say 96-bit) you have to design your own support for, say, integer overflow detection etc. which will be slow. 

