Sự khác biệt giữa “int” và “uint” / “long” và “ulong” là gì?


Câu trả lời:


224

Các kiểu dữ liệu nguyên thủy có tiền tố là "u" là các phiên bản không dấu có cùng kích thước bit. Về mặt hiệu quả, điều này có nghĩa là chúng không thể lưu trữ các số âm, nhưng mặt khác, chúng có thể lưu trữ các số dương lớn gấp đôi các số có dấu của chúng. Các đối tác đã ký không có tiền tố "u".

Các giới hạn cho int (32 bit) là:

int: 2147483648 to 2147483647 
uint: 0 to 4294967295 

Và trong thời gian dài (64 bit):

long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615

12
Điều này khá thú vị khi làm việc bằng tay. Một biến ký 32-bit sử dụng 1 bit cho các dấu hiệu (tích cực hay tiêu cực) để có thể lưu trữ các giá trị giữa -2 ^ 31 và + 2 ^ 31 - 1
Jaco Pretorius

khi so sánh int và uint để sử dụng, cái nào khả thi?
Arun Prasad

C ++ tương đương là gì?
darkgaze

@JacoPretorius Thats sai. 8 bit int có phạm vi từ –128 đến 127. Bit thứ 9 đại diện cho 256. Vì vậy, với 8 bit bạn có thể biểu diễn tất cả các giá trị lên đến 255 (giá trị thứ 9 - 1). Phạm vi từ -128 đến 127 có độ dài chính xác là 255. Vì vậy, không có bit nào giữ dấu. Tất cả các giá trị lên đến 127 đều dương. Các giá trị trên được hiển thị âm. 255 sẽ là -1. 254 sẽ là -2 và cứ thế giảm một chiều xuống 128.
C4d

Tôi nghĩ cũng cần lưu ý rằng đặc biệt đối với int vs uint, số nguyên không dấu không tuân thủ CLS và bạn nên sử dụng int thường xuyên nhất có thể.
db2

38

uintulonglà các phiên bản không dấu của intlong. Điều đó có nghĩa là chúng không thể tiêu cực. Thay vào đó chúng có giá trị tối đa lớn hơn.

Loại tối thiểu tối đa CLS tuân thủ
int -2,147,483,648 2,147,483,647 Có
uint 0 4,294,967,295 Không
dài –9.223.372.036.854.775.808 9.223.372.036.854.775.807 Có
dài 0 18.446.744.073.709.551.615 Không

Để viết một int không dấu theo nghĩa đen trong mã nguồn của bạn, bạn có thể sử dụng hậu tố uhoặc Uví dụ 123U.

Bạn không nên sử dụng uint và ulong trong giao diện công cộng của mình nếu bạn muốn Tuân thủ CLS .

Đọc tài liệu để biết thêm thông tin:

Nhân tiện, cũng có shortushortbytesbyte .


Điều này thật thú vị - ý bạn là gì về tuân thủ CLS? Liên kết đi đến tài liệu MSDN cho int. Nếu theo "CLS" bạn có nghĩa là đặc tả ngôn ngữ C # sau đó tôi không hiểu - spec mô tả rõ ràng cả hai uint và ulong (phần 1.3)
Isak Savo

1
@Isak Savo: Điều quan trọng là phải tuân thủ CLS nếu bạn đang viết giao diện có thể được sử dụng bởi các ngôn ngữ .NET khác ngoài C #.
Mark Byers

Tò mò mà bạn đề cập ngắn và ushort nhưng bỏ qua byte và SByte :)
La Mã Starkov

10

uphương tiện unsigned, do đó ulonglà một số lượng lớn không biểu hiện. Bạn có thể lưu trữ một giá trị lớn ulonghơn long, nhưng không được phép sử dụng số âm.

Một longgiá trị được lưu trữ ở dạng 64-bit, với chữ số đầu tiên của nó để hiển thị nếu đó là một số dương / âm. trong khi ulongcũng là 64-bit, với tất cả 64 bit để lưu trữ số. vì vậy độ dài tối đa là 2 (64) -1, trong khi độ dài là 2 (63) -1.


9

Sự khác biệt là kiểu dữ liệu uintulonglà kiểu dữ liệu không dấu, có nghĩa là phạm vi khác nhau: Chúng không chấp nhận các giá trị âm:

int range: -2,147,483,648 to 2,147,483,647
uint range: 0 to 4,294,967,295

long range: 9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
ulong range: 0 to 18,446,744,073,709,551,615
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.