2013-03-17 31 views
8

Sự khác nhau giữa unsigned shortunsigned int là gì? Tôi thấy rằng unsigned short0-65,535unsigned int0-65,535 hoặc 0-4,294,967,295. Tôi không hiểu sự khác biệt rất tốt. Làm thế nào tôi có thể biết được kích thước của kiểu dữ liệu trong kiến ​​trúc của tôi? Và nếu ví dụ: c = (unsigned short) d; khi cunsigned short và d là unsigned int; no co nghia la gi? 16 bit đầu tiên từ d được gán cho c?unsigned ngắn vs unsigned int - đôi khi họ là cùng một phạm vi?

+0

Tại sao có ba ngôn ngữ được đề cập? – Lion

+0

Âm thanh như C, loại bỏ các thẻ ngôn ngữ không liên quan. – djechlin

+0

Nó không phải là chung cho 3 ngôn ngữ? – mpluse

Trả lời

6

Bạn thực sự hỏi sự khác biệt giữa shortint là gì. Câu trả lời là short có thể hẹp hơn, nhưng cũng có thể có cùng chiều rộng như, int. Đó là hầu như tất cả chúng ta biết chắc chắn, độc lập với nền tảng. Rất nhiều nền tảng có int và 16 bit short 32 bit, nhưng không phải tất cả.

+0

Cảm ơn bạn. Bạn có thể kiểm tra phần chỉnh sửa thứ hai của tôi không? :) – mpluse

+1

Không, tôi sẽ không, vui lòng chỉ hỏi một câu hỏi khác thay vì thêm nhiều bit hơn vào một câu hỏi đã được trả lời. Nếu bạn tìm kiếm các câu hỏi mới, có thể bạn sẽ thấy họ đã có câu hỏi với câu trả lời ở đây. –

+1

OK. Cảm ơn bạn, anyway. – mpluse

1

Đây là một liên kết hữu ích để giải thích lịch sử của các kiểu dữ liệu C:

http://en.wikipedia.org/wiki/C_data_types

Vì vậy, kích thước của kiểu dữ liệu của bạn là nền tảng phụ thuộc, nhưng nếu int của bạn là 32-bit chiều dài sau đó nó sẽ có thể đại diện cho một trong 2^32 số khác nhau (0 - 4,294,967,295 nếu chưa ký). Tương tự, nếu ngắn của bạn dài 16 bit thì nó có thể đại diện cho một trong 2^16 số khác nhau (0 - 65,535 nếu không dấu).

Liên kết này cung cấp cho bạn các chi tiết thực hiện cho Visual Studio 2005, nơi ints là 32-bit có kích thước (4 byte) và quần short là 16-bit (2 byte):

http://msdn.microsoft.com/en-us/library/s3f49ktz(v=vs.80).aspx

chính xác của bạn thực hiện sẽ phụ thuộc vào trình biên dịch của bạn.

Đối với phần cuối của câu hỏi, có nếu bạn cố gắng bỏ một giá trị lớn hơn giá trị cực đại ngắn xuống thì bạn sẽ kết thúc bằng một giá trị khác (có thể là 16 bit đầu tiên nhưng bạn nên kiểm tra để chắc chắn).

+0

Cảm ơn bạn. Bạn có thể kiểm tra phần chỉnh sửa thứ hai của tôi không? :) – mpluse

+0

Xem chỉnh sửa của tôi ở trên – gavinj500

+0

Tôi đã nhìn thấy liên kết. TY – mpluse

-1

Trước tiên, bạn phải hiểu nội dung chưa được ký và viết tắt là gì.

Mọi thứ được chia thành các bit.

Một ngắn gọn là 16 bit, mỗi bit là 1 hoặc 0. Để đơn giản tôi sẽ chứng minh với 4 bit

1000 - Unsigned = 8 
1000 - Signed = -8 
1111 - Unsigned = 15 which is equal to 2^(# of bits) -1 
1111 - Signed = -1 

Chú ý rằng với một số unsigned, phạm vi các số lớn hơn, chúng ta có thể làm 1111 = 15.

Nhưng với một số ký, khả năng tối đa là 0111 = 7.

Bây giờ một đoạn ngắn có 16 bit, cho nó

signed range of −32,768 to 32,767 [−(2^15) to 2^15 − 1] 
Unsigned range: 0 to 65,53 = 2^16 -1 

Một Int có 32 bit, đưa ra một loạt các

Signed:−2,147,483,648 to 2,147,483,647 = −(2^31) to 2^31 − 1 
Unsigned: 0 to 4,294,967,295 = 2^16 -1 
+0

Cảm ơn bạn. Tôi biết rằng, chỉ là một sự mơ hồ bởi vì họ có cùng một phạm vi giá trị. – mpluse

+0

@Lafore Ah. Khi bạn thực hiện một đoạn ngắn, nó không đảm bảo 16 bit, trong khi một 16bit Int nào. Vì vậy, nó cho những trường hợp khi bạn hoàn toàn cần một số nguyên 16 bit. Kinda lẻ. – BrettD

+1

Vô cùng sai ... một 'char' ít nhất là 8 bit, một' ngắn' hoặc một 'int' 16, một bit dài 32 bit. Và trên CRAY chúng là _all_ 32 bit. – vonbrand

0

Chúng ta không thể nói một tên kiểu dữ liệu (short, int, long, etc. kép) có chiều dài chỉ chút cụ thể trên tất cả các kiến trúc vi xử lý hoặc ngôn ngữ lập trình.Nó chủ yếu phụ thuộc vào kiến ​​trúc của bộ vi xử lý và tất nhiên là các định nghĩa của ngôn ngữ lập trình. Nói chung, ký/unsigned ngắn nên có (tôi mong chờ) một nửa bit-kích thước của ký/unsigned int.

+0

Tải xuống! Cảm ơn bạn. – mpluse

+1

Không ... trong C 'short' và' int' có thể rất tốt cả hai đều là 16 bit. Đó là trường hợp trên DOS, BTW. – vonbrand

Các vấn đề liên quan