Tôi đã thấy những điều này được đề cập trong ngữ cảnh của C và C++, nhưng sự khác nhau giữa các biến được ký và không dấu là gì?Sự khác biệt giữa các biến được ký và không ký là gì?
Trả lời
Signed biến, chẳng hạn như số nguyên ký sẽ cho phép bạn để đại diện cho số cả trong phạm vi tích cực và tiêu cực.
biến Unsigned, chẳng hạn như số nguyên unsigned, sẽ chỉ cho phép bạn thể hiện con số trong dương.
biến Unsigned và ký cùng loại (ví dụ như int
và byte
) cả hai đều có cùng một phạm vi (khoảng 65.536 và 256 số, tương ứng), nhưng unsigned có thể đại diện cho một số cường độ lớn hơn tương ứng ký biến .
Ví dụ, một unsigned byte
thể đại diện cho các giá trị 0
-255
, trong khi signed byte
thể đại diện -128
để 127
.
Trang Wikipedia trên Signed number representations giải thích sự khác biệt trong biểu diễn ở cấp bit và trang Integer (computer science) cung cấp một phạm vi cho mỗi loại số nguyên đã ký/không dấu.
Số dương lớn hơn 0. Số đã ký, ít nhất là trong C, có thể sử dụng bit dấu chứ không phải là biểu diễn bổ sung, do đó, không có cùng phạm vi như chưa được ký do lặp lại +/- số không. Nếu bạn nói một int là 16 bit, hãy nói nền tảng; hệ thống hiện đại nhất là 32 hoặc 64 bit. –
Biến được ký sử dụng một bit để gắn cờ cho dù chúng là dương hay âm. Biến chưa được ký không có bit này, do đó, chúng có thể lưu trữ số lớn hơn trong cùng một không gian, nhưng chỉ số không âm, ví dụ: 0 và cao hơn.
Để biết thêm: Unsigned and Signed Integers
Biến không được ký chỉ có thể là số dương, vì chúng thiếu khả năng cho biết chúng là số âm.
Khả năng này được gọi là 'ký hiệu' hoặc 'bit ký'.
Tác dụng phụ là không có bit ký, chúng có thêm một bit có thể được sử dụng để biểu thị số đó, nhân đôi số lượng tối đa mà nó có thể đại diện.
Biến được ký có thể là 0, dương hoặc âm.
Biến không được ký có thể là 0 hoặc dương.
Biến chưa được sử dụng đôi khi được sử dụng vì có thể sử dụng nhiều bit hơn để biểu thị giá trị thực. Cung cấp cho bạn phạm vi rộng hơn. Ngoài ra, bạn có thể đảm bảo rằng một giá trị âm sẽ không được chuyển cho hàm của bạn chẳng hạn.
biếnUnsigned là các biến được trong nội bộ đại diện mà không có một dấu hiệu toán học (cộng hoặc trừ) có thể lưu trữ 'zero' hoặc các giá trị tích cực chỉ. Giả sử biến chưa ký là n bit về kích thước, sau đó nó có thể đại diện cho giá trị 2^n (2 công suất n) - từ 0 đến (2^n -1). Một biến đã ký, mặt khác, 'mất' một chút để biểu diễn dấu, vì vậy nó có thể lưu trữ các giá trị từ - (2^(n-1) -1) đến (2^(n-1)) bao gồm số không.Do đó, biến được ký có thể lưu trữ giá trị dương, giá trị âm và số không.
PS:
Bên trong, các dấu hiệu toán học có thể được biểu diễn dưới dạng bổ sung của một người, hình thức bổ sung hai hoặc với một chút dấu (ví dụ: 0 -> +, 1-> -)
Tất cả những phương pháp hiệu quả chia phạm vi các giá trị thể hiện trong n bit (2^n) thành ba phần, dương, âm và không.
Đây chỉ là hai xu giá trị của tôi.
Tôi hy vọng điều này sẽ hữu ích.
unsigned được sử dụng khi giá trị ur phải là số dương, không có giá trị tiêu cực ở đây, nếu ký hợp đồng với int tầm -32.768-32.767 nếu unsigned int cho phạm vi 0-65.535
Trong khi thường được gọi là một ' bit dấu ', các giá trị nhị phân mà chúng ta thường sử dụng không có bit dấu hiệu đúng.
Hầu hết các máy tính sử dụng số học bổ sung hai.Số âm được tạo ra bằng cách lấy one's-bổ sung (lật tất cả các bit) và thêm một:
5 (decimal) -> 00000101 (binary)
1's complement: 11111010
add 1: 11111011 which is 'FB' in hex
Đây là lý do tại sao một byte ký giữ các giá trị từ -128 đến 127 thay vì -127 đến 127:
1 0 0 0 0 0 0 0 = -128
1 0 0 0 0 0 0 1 = -127
- - -
1 1 1 1 1 1 1 0 = -2
1 1 1 1 1 1 1 1 = -1
0 0 0 0 0 0 0 0 = 0
0 0 0 0 0 0 0 1 = 1
0 0 0 0 0 0 1 0 = 2
- - -
0 1 1 1 1 1 1 0 = 126
0 1 1 1 1 1 1 1 = 127
(thêm 1-127 cho :)
1 0 0 0 0 0 0 0
mà chúng ta thấy ở trên cùng của biểu đồ này là -128.
Nếu chúng tôi có bit dấu hiệu thích hợp, phạm vi giá trị sẽ giống nhau (ví dụ: -127 đến +127) vì một bit được dành riêng cho dấu. Nếu nhất-đáng-bit là bit dấu, chúng tôi có:
5 (decimal) -> 00000101 (binary)
-5 (decimal) -> 10000101 (binary)
Điều thú vị trong trường hợp này là chúng tôi có cả số 0 và số không âm:
0 (decimal) -> 00000000 (binary)
-0 (decimal) -> 10000000 (binary)
Chúng tôi không có -0 với two's-bổ sung; những gì sẽ là -0 là -128 (hoặc là tổng quát hơn, nhiều hơn giá trị dương lớn nhất). Chúng tôi làm với sự bổ sung của một người mặc dù; tất cả 1 bit là âm 0.
Về mặt toán học, -0 bằng 0. Tôi mơ hồ nhớ một máy tính có số 0 < 0, nhưng hiện giờ tôi không thể tìm thấy bất kỳ tham chiếu nào.
Cảm ơn bạn rất nhiều! Tôi đã thực sự bối rối tại sao nó là -128 đến 127 cho một byte đã ký và không -127 đến 127. Câu trả lời này cần nhiều phiếu bầu hơn! –
Đây có thể không phải là định nghĩa chính xác nhưng tôi sẽ cung cấp cho bạn một ví dụ: Nếu bạn tạo một số ngẫu nhiên lấy nó từ thời gian hệ thống, ở đây sử dụng biến chưa ký là có lợi. các con số dưới dạng số đã ký cho cả số dương và số âm. Do thời gian hệ thống không thể âm, chúng tôi sử dụng biến không dấu (Chỉ các số dương) và chúng tôi có nhiều số ngẫu nhiên hơn.
- 1. Sự khác biệt giữa Nhật ký và Nhật ký?
- 2. Sự khác biệt của Android giữa các tệp .apk đã ký và chưa được ký?
- 3. Sự khác nhau giữa các tham số kiểu ký tự đại diện và ký tự được bao bọc là gì?
- 4. Sự khác biệt giữa trang mã và mã hóa ký tự là gì?
- 5. Sự khác biệt giữa "mã hóa", "bộ ký tự" và "trang mã" là gì?
- 6. Sự khác biệt giữa 'ký tự' và 'octet' trong băm
- 7. Sự khác biệt giữa ký và unsigned trong MySQL?
- 8. Sự khác biệt giữa một chuỗi ký tự và một biểu tượng trong Ruby là gì?
- 9. Autofac khác biệt giữa ký và RegisterType
- 10. Sự khác biệt giữa char và ký char trong C++?
- 11. Sự khác biệt giữa Trình duyệt và Nút là gì?
- 12. Sự khác biệt giữa mảng ký tự và con trỏ
- 13. Unix: Sự khác biệt giữa nguồn và xuất là gì?
- 14. là gì sự khác biệt giữa SQL_Latin1_General_CP1_CI_AS và SQL_Latin1_General_CP1_CI_AI
- 15. Sự khác biệt giữa biến động & extern là gì?
- 16. Sự khác biệt giữa Request.ServerVariables ["REMOTE_ADDR"] và Request.UserHostAddress là gì?
- 17. Sự khác biệt giữa ký hiệu cộng (+) của Oracle và ký hiệu ansi JOIN?
- 18. Sự khác biệt giữa while (true) và loop là gì?
- 19. Sự khác biệt giữa việc sử dụng con trỏ ký tự và mảng ký tự
- 20. Sự khác biệt giữa các biến cục bộ auto int a và int a là gì?
- 21. PHP -Điều gì là sự khác biệt giữa các biến toàn cầu và hằng số
- 22. Sự khác biệt chữ ký giữa lambda có/không có biến bị bắt?
- 23. Trong Ember.js, sự khác biệt giữa [] và Ember.A ([]) là gì?
- 24. Sự khác biệt giữa đúc và co giật là gì?
- 25. Sự khác biệt giữa "$ biến" và "biến" là gì - JavaScript - jQuery
- 26. Sự khác biệt giữa hằng số macro và biến không đổi trong C là gì?
- 27. Sự khác biệt giữa (string [] args) và System.Environment.CommandLine là gì?
- 28. SBT - Sự khác biệt giữa tên và id là gì?
- 29. sự khác biệt giữa lệnh linux và unix là gì?
- 30. Sự khác biệt giữa gói android.opengl và javax.microedition.khronos.opengles là gì?
Tôi nghĩ chúng tôi giả định trong lập trình theo mặc định và không phải khi được gắn thẻ không liên quan đến lập trình? –
Vì vậy, tôi đã tìm thấy khá một vài queestions theo lập trình. Tôi tự hỏi tại sao? – batbrat
Câu hỏi liên quan đến khía cạnh cụ thể của lập trình nói chung. – Sam152