Tôi đã và đang sử dụng! (phủ định hợp lý) trong C và bằng các ngôn ngữ khác, tôi tò mò không ai biết làm thế nào để làm của riêng bạn! chức năng? hoặc có một cách sáng tạo để làm một?Tính năng phủ định hợp lý hoạt động như thế nào trong C?
Trả lời
int my_negate(int x)
{
return x == 0 ? 1 : 0;
}
đó là tốt hơn :) –
Không thể tin rằng tôi quản lý để mess rằng lên :-p –
Xảy ra tất cả thời gian với tôi. Tôi sẽ viết một cái gì đó, nhưng thực sự có nghĩa là đối diện chính xác. –
!e
có thể được thay thế bằng ((e)?0:1)
Nếu bạn muốn quá tải một nhà điều hành, các nguyên mẫu thích hợp là:
bool operator!();
Tôi không phải là một fan hâm mộ lớn của quá tải khai thác, nhưng một số những người như đường cú pháp của họ. EDIT: Đây là C++ chỉ! Đặt nó trong định nghĩa của lớp học của bạn.
Các toán tử tải trọng hoạt động tốt với các mẫu. Chỉ cần đảm bảo 'toán tử!()' Của bạn có cùng nghĩa ngữ như '!'. –
Nếu bạn đặt nó trong định nghĩa lớp, nó không có đối số và hoạt động trên * điều này. toán tử bool!() const; Nguyên mẫu bạn hiển thị có thể được sử dụng cho định nghĩa toán tử của một người bạn. –
Phải. Trường hợp sử dụng tốt để quá tải một toán tử. Tuy nhiên, nếu bạn không có lý do chính đáng như vậy, toán tử thường không trực quan như một hàm được đặt tên tốt. Luôn có ngoại lệ. – thebretness
Hãy nhớ toán tử bang '!' hoặc dấu chấm than trong ngôn ngữ tiếng Anh, được xây dựng thành ngôn ngữ lập trình như một phương tiện để phủ nhận.
Cân nhắc ternary nhà điều hành ví dụ này:
(some condition) ? true : false;
Bây giờ, nếu đã được phủ nhận, các nhà điều hành ternary sẽ này
(some condition) ? false : true;
Khu vực chung, nơi mà có thể nhận được một số lập trình viên trong một chút phù hợp là hàm strcmp
, trả về 0 cho các chuỗi giống nhau và 1 cho hai chuỗi không giống nhau:
if (strcmp(foo, "foo")){ }
Khi thực sự cần:
if (!strcmp(foo, "foo")){ }
Nói chung khi bạn phủ nhận, đó là điều ngược lại như thể hiện trong ví dụ điều hành ternary ...
Hope this helps.
'strcmp' trả về 0 cho các chuỗi giống nhau; nó trả về một số âm (không nhất thiết -1) nếu chuỗi đầu tiên đứng trước thứ hai, và một số dương (không nhất thiết phải +1) nếu chuỗi đầu tiên sau thứ hai - nơi thứ tự dựa trên các giá trị byte của (unsigned) ký tự tạo chuỗi. –
@ Jonathan: Đúng, -1 được coi là đúng ..... vì nó là int không dấu tối đa ... tức là. 0xFFFF ... tức là. khác 0, bất kể khi nào hoặc 'ive – t0mm13b
Câu trả lời của bạn nói' hàm strcmp, trả về 0 cho các chuỗi giống nhau, và 1 cho hai chuỗi không giống nhau '. Điều này là không chính xác; nó trả về một giá trị khác không cho hai chuỗi không giống nhau, không phải 'vô điều kiện 1 nếu các chuỗi khác nhau'. –
C xem xét tất cả các giá trị khác 0 "true" và zero "false". Phủ định hợp lý được thực hiện bằng cách kiểm tra với số không. Nếu đầu vào chính xác là 0, xuất ra một giá trị khác 0; nếu không, đầu ra bằng không. Trong mã, bạn có thể viết này là (input == 0) ? 1 : 0
(hoặc bạn có thể chuyển đổi nó thành một tuyên bố if
).
Khi bạn hỏi cách "tạo phương pháp riêng của mình!", Ý bạn là bạn muốn viết một hàm phủ nhận giá trị logic hoặc bạn có muốn xác định toán tử dấu chấm than không? Nếu trước đây, sau đó tuyên bố tôi đăng ở trên là đủ. Nếu sau này, sau đó tôi sợ đây là một cái gì đó mà không thể được thực hiện trong C. C + + hỗ trợ quá tải nhà điều hành, và nếu làm điều này là một sự cần thiết nghiêm ngặt thì tôi sẽ đề nghị tìm kiếm ở đó.
- 1. Tính năng Định tuyến Web hoạt động như thế nào?
- 2. Toán tử phủ định hợp lý "!" hoạt động
- 3. Tính năng định vị địa lý HTML5 hoạt động như thế nào?
- 4. Tính năng khóa phạm vi hoạt động như thế nào?
- 5. Chức năng scanf hoạt động như thế nào trong C?
- 6. Tính năng ghi đè url hoạt động như thế nào?
- 7. Chức năng C cụ thể hoạt động như thế nào?
- 8. Tính năng kế thừa ảo hoạt động như thế nào?
- 9. Tính năng RescueTimes chặn hoạt động như thế nào?
- 10. memory_limit: Tính năng này hoạt động như thế nào?
- 11. Định nghĩa chức năng sau hoạt động như thế nào?
- 12. Lớp phủ Turbo Pascal hoạt động như thế nào?
- 13. Tính năng đọc của Safari hoạt động như thế nào?
- 14. Các mẫu phủ định hoạt động như thế nào trong .gitignore?
- 15. Tính năng định vị của trình duyệt web hoạt động như thế nào?
- 16. Tính năng tích hợp liên tục của bạn hoạt động như thế nào?
- 17. Tính đúng/sai hoạt động trong PHP như thế nào?
- 18. Thuộc tính tự động tổng hợp trong xcode 4.4 hoạt động như thế nào?
- 19. Tính năng C# này có tên không và nó hoạt động như thế nào?
- 20. Chức năng này hoạt động như thế nào?
- 21. C# Events hoạt động như thế nào?
- 22. Chức năng giảm hoạt động như thế nào?
- 23. Thuộc tính '.class' hoạt động như thế nào?
- 24. Toán tử phủ định hợp lý trong F #? (! -equivalent)
- 25. Định nghĩa này của ArrowLoop.loop hoạt động như thế nào?
- 26. Biến trong C/C++ hoạt động như thế nào?
- 27. Tính năng dọn sạch DOM Node hoạt động như thế nào trong d3?
- 28. Tính năng hiểu lambda/năng suất/máy phát điện này hoạt động như thế nào?
- 29. Nhập động, Mục tiêu-C, hoạt động như thế nào?
- 30. Trình biên dịch C/C++ hoạt động như thế nào?
Khi bạn nói về một phương pháp "!", Có vẻ như bạn đang nói về C++. Bạn có thể viết một hàm phủ nhận hợp lý trong C, nhưng bạn không thể ghi đè lên! nhà điều hành. C++ cho phép bạn viết một toán tử! - hoặc là một phương pháp hoặc một chức năng không phải thành viên - nhưng đó là C++, không phải C. – Steve314
Nó không dễ dàng như tôi đã nghĩ để tìm một phần hỏi đáp với tiêu chuẩn nói rằng '!' trả về 1 nếu đầu vào là 0 (trái ngược với bất kỳ giá trị khác khác không trong một thời gian phụ thuộc vào trình biên dịch), nhưng nó là [C99 tiêu chuẩn 6.5.3.3] (http://stackoverflow.com/questions/7945950/is-logical-negation-of- zero-0-compiler-dependent-in-c). Chỉ là FYI. – HostileFork