Toán tử - -> trong C ++ là gì?


8925

Sau khi đọc Các tính năng ẩn và Dark Corners của C ++ / STL trên comp.lang.c++.moderated, tôi đã hoàn toàn ngạc nhiên rằng sau Đoạn biên soạn và làm việc tại cả Visual Studio 2008 và G ++ 4.4.

Đây là mã:

#include <stdio.h>
int main()
{
    int x = 10;
    while (x --> 0) // x goes to 0
    {
        printf("%d ", x);
    }
}

Đầu ra:

9 8 7 6 5 4 3 2 1 0

Tôi cho rằng đây là C, vì nó cũng hoạt động trong GCC. Điều này được định nghĩa trong tiêu chuẩn và nó đến từ đâu?


503
Hoặc thậm chí chỉ là khoảng cách thích hợp ... Tôi không nghĩ rằng tôi đã từng thấy một khoảng trống giữa biến và ++hoặc --trước đó ...
Matthew Scharley

1154
Toán tử "đi đến" này có thể được hoàn nguyên (0 <- x). Và cũng có một toán tử "chạy đến" (0 <---- x). Geez, điều thú vị nhất tôi từng nghe về cú pháp c ++ =) +1 cho câu hỏi.
SadSido

233
Thật thú vị, mặc dù cách giải thích rất sai, nhưng nó mô tả chính xác những gì mã làm. :)
Noldorin

811
Hãy tưởng tượng các khả năng cú pháp mới: #define upto ++<, #define downto -->. Nếu bạn cảm thấy xấu xa, bạn có thể làm #define for while(#define do ) {(và #define done ;}) và viết for x downto 0 do printf("%d\n", x) doneOh, nhân loại ...
Chris Lutz

98
Mở ra khả năng của một cách mã hóa hoàn toàn mới, đáng để hy sinh một vài cảnh báo của trình biên dịch cho: bool CheckNegative (int x) {return x <0? đúng sai ); }
ttt

Câu trả lời:


8603

-->không phải là một nhà điều hành. Trên thực tế, đó là hai toán tử riêng biệt -->.

Mã giảm của điều kiện x, trong khi trả về xgiá trị gốc (không giảm), và sau đó so sánh giá trị ban đầu với 0việc sử dụng >toán tử.

Để hiểu rõ hơn, tuyên bố có thể được viết như sau:

while( (x--) > 0 )

262
Sau đó, một lần nữa, nó trông giống như một loại toán tử phạm vi trong bối cảnh đó.
Charles Salvia

109
Nói rằng x là giảm sau và sau đó so với 0 cũng giống như nói x bị giảm sau khi được so sánh với 0
Charles Salvia

8
Tôi không nghĩ nó giống nhau. Tôi nghĩ rằng từ "sau đó" ngụ ý có một đơn đặt hàng (sau khi giảm dần, giá trị của x là một ít hơn). Tôi nghĩ rằng người ta có thể nói "Bạn đang đăng giảm x và sau đó so sánh giá trị cũ của nó và 0 ..." để làm cho nó rõ ràng hơn. Nhưng dù sao đây cũng là nitpicking. Chúng ta đều biết những gì có nghĩa là.
Julian Schaub - litb

38
Trong Java, nó cũng biên dịch :)
Steven Devijver

44
Tên của nó, @Jay, là phong cách lập trình tồi :-) Điều này được chứng minh bằng thực tế câu hỏi đã được hỏi ngay từ đầu. Nó có ý nghĩa hơn nhiều đối với các nhà khai thác ràng buộc về mặt văn bản với thứ mà họ đang vận hành thay vì một cái gì đó không liên quan, do đó while (x-- > 0)sẽ có nhiều khả năng hơn. Nó cũng làm cho rõ ràng hơn những gì đang diễn ra (ít nhất là trong trình chỉnh sửa phông chữ cố định) có nghĩa là dấu ngoặc đơn trong câu trả lời này sẽ không cần thiết.
paxdiablo

3131

Hoặc cho một cái gì đó hoàn toàn khác ... xtrượt đến 0.

while (x --\
            \
             \
              \
               > 0)
     printf("%d ", x);

Không phải là toán học, nhưng ... mỗi bức tranh vẽ một ngàn chữ ...


216
@mafutrct - Theo tôi nhớ thì \ trong C chỉ nối thêm dòng tiếp theo như thể không có ngắt dòng. \ Ở đây về cơ bản không làm gì cả.
Hogan

2
@mafu ký tự '\' cho trình biên dịch biết rằng dòng hiện tại tiếp tục ở dòng tiếp theo và do đó trình biên dịch sẽ hợp nhất cả hai dòng và biên dịch thành một. 'while (x -> 0)' sẽ chạy cho đến khi x bằng -1. Nhưng, cách anh ta tạo ra các vết lõm làm cho nó trông giống như x đang trượt về không. 'Trong khi x trượt xuống 0 ...'
Felype

16
IIRC, K & R C cho phép khoảng trắng giữa '-'s trong toán tử giảm dần, trong trường hợp đó bạn có thể có dấu gạch chéo ngược ở giữa, trông sẽ mát hơn. :)
Jules

10
@ArnavBorborah đó là một biểu thức cũ why waste words when a picture does a better job, được sử dụng như một trò đùa trong bối cảnh này. (thực tế có 2 từ khóa whileprintf)
không đồng bộ

88
À đúng rồi, toán tử trượt tối nghĩa. Làm sao tôi có thể quên được!
demkoryu

2377

Đó là một toán tử rất phức tạp, thậm chí ISO / IEC JTC1 (Ủy ban kỹ thuật chung 1) đã đặt mô tả của nó trong hai phần khác nhau của Tiêu chuẩn C ++.

Đùa qua một bên, họ là hai toán tử khác nhau: -->được mô tả tương ứng trong §5.2.6 / 2 và §5.9 của Tiêu chuẩn C ++ 03.


1277

Nó tương đương với

while (x-- > 0)

x--(giảm dần bài) tương đương với x = x-1như vậy, mã chuyển đổi thành:

while(x > 0) {
    x = x-1;
    // logic
}
x--;   // The post decrement done when x <= 0

15
Điều này không hoàn toàn đúng. Giá trị của x bên trong thân vòng lặp là khác nhau trong trường hợp thứ hai. Câu lệnh gán trong ví dụ của bạn phải ở trên logic để nó tương đương. Postfix - trừ 1, nhưng so sánh sẽ xảy ra với giá trị từ trước khi trừ.
uliwitness

4
@uliwitness Đây là thực sự tương đương. Sẽ là sai nếu tiền tố đang được sử dụng: 0 >-- xTrong trường hợp xnày được giảm trước logic. Trong postfix, logic được thực thi trước khi giảm và do đó cả hai mẫu đều tương đương nhau. Hãy viết chúng lên Consolevà kiểm tra chúng.
Cand Meatark

12
Chúng vẫn không tương đương. Sau vòng lặp đầu tiên, x là -1 (hoặc tràn trong trường hợp không dấu), sau vòng thứ hai, là 0. (Giả sử x bắt đầu không âm, không lặp lại sửa đổi x hoặc ngắt hoặc Lỗi)
Caesar

1
while(x=x-1,x+1 > 0)là tương đương
SS Anne

2
@Shebham, Đây là một ví dụ ngược lại: nếu x bắt đầu bằng 0, trong vòng lặp ban đầu, nó sẽ thoát là -1, với phiên bản của bạn, nó sẽ vẫn bằng không. Vì vậy, chúng không tương đương.
Elliott

1209

x có thể về không thậm chí nhanh hơn theo hướng ngược lại:

int x = 10;

while( 0 <---- x )
{
   printf("%d ", x);
}

8 6 4 2

Bạn có thể kiểm soát tốc độ bằng một mũi tên!

int x = 100;

while( 0 <-------------------- x )
{
   printf("%d ", x);
}

90 80 70 60 50 40 30 20 10

;)


6
Hệ điều hành nào, loại đầu ra này được tạo ra, tôi đang sử dụng Ubuntu 12.04 trong đó tôi có một thông báo lỗi
Bhuvanesh

74
Mặc dù điều này là hiển nhiên, nhưng với mọi người mới biết về C ++, hãy đọc nó: đừng làm điều đó. Chỉ cần sử dụng phép gán tăng nếu bạn có nhu cầu tăng / giảm nhiều hơn một.
Blimeo

263
Không với "laser". while (0> - - - - - - - - - - ---------- x) ... cùng một đầu ra.
Samuel Danielson

4
@phord bạn có chắc là nó không biên dịch không? -> coliru.stacked-crooking.com/a/5aa89a65e3a86c98
doc

18
@doc Nó biên dịch trong c ++, nhưng không có trong c.
phord

548

nó là

#include <stdio.h>
int main(void){
     int x = 10;

     while( x-- > 0 ){ // x goes to 0

       printf("%d ", x);
     }

     return 0;
}

Chỉ cần không gian làm cho mọi thứ trông buồn cười, --giảm dần và >so sánh.


431

Việc sử dụng -->có liên quan lịch sử. Giảm là (và vẫn còn trong một số trường hợp), nhanh hơn so với tăng trên kiến ​​trúc x86. Sử dụng -->gợi ý rằng điều đó xsẽ xảy ra 0, và hấp dẫn những người có nền tảng toán học.


479
Không chính xác. Giảm và tăng mất cùng một khoảng thời gian, lợi ích của việc này là so sánh với 0 rất nhanh so với so sánh với một biến. Điều này đúng với nhiều kiến ​​trúc, không chỉ x86. Bất cứ điều gì với một hướng dẫn JZ (nhảy nếu không). Chọc xung quanh bạn có thể tìm thấy nhiều vòng lặp "cho" được viết ngược để lưu chu kỳ so sánh. Điều này đặc biệt nhanh trên x86 vì hành động giảm biến đã đặt cờ 0 một cách thích hợp, do đó bạn có thể phân nhánh mà không cần phải so sánh rõ ràng với biến.
burito

25
Chà, giảm dần về 0 có nghĩa là bạn chỉ phải so sánh với 0 trên mỗi vòng lặp, trong khi lặp về n có nghĩa là so sánh với n mỗi lần lặp. Cái trước có xu hướng dễ dàng hơn (và trên một số kiến ​​trúc, được tự động kiểm tra sau mỗi hoạt động đăng ký dữ liệu).
Joey Adams

9
@burrito Mặc dù tôi không đồng ý, các vòng lặp dựa trên các giá trị khác không thường được dự đoán gần như hoàn hảo.
Duncan

14
Tăng và giảm đều nhanh như nhau, có thể trên tất cả các nền tảng (chắc chắn trên x86). Sự khác biệt là trong việc kiểm tra điều kiện kết thúc vòng lặp. Để xem bộ đếm đã đạt đến 0 có thực sự miễn phí hay không - khi bạn giảm giá trị, cờ 0 được đặt trong bộ xử lý và để phát hiện điều kiện kết thúc, bạn chỉ cần kiểm tra cờ đó trong khi bạn tăng thao tác so sánh trước điều kiện kết thúc có thể đươc tìm thấy.
lego

7
Tất nhiên, tất cả điều này là moot những ngày này, vì trình biên dịch hiện đại có thể vector hóa và đảo ngược các vòng lặp tự động.
Tiên nữ Lambda


362

Hoàn toàn đam mê, nhưng tôi sẽ sử dụng cái này:

#define as ;while

int main(int argc, char* argv[])
{
    int n = atoi(argv[1]);
    do printf("n is %d\n", n) as ( n --> 0);
    return 0;
}

17
@SAFX - Nó sẽ là chữ tượng hình hoàn hảo với dấu ngoặc Ai Cập
mouviciel

1
Điều này không biên dịch. C không phải là Pascal, trong đó phần bên trong do ... whilelà danh sách câu lệnh. Trong C nó là một khối, vì vậy nó phải được do { ... } while.
Hầu tước Lorne

25
@EJP nó biên dịch. Cú pháp là do statement while ( expression ) ;. Có nói rằng, tôi hy vọng nó được hiểu tôi có nghĩa là ví dụ như một trò đùa.
Escualo

321

Một cuốn sách tôi đã đọc (tôi không nhớ chính xác cuốn sách nào) đã nêu: Trình biên dịch cố gắng phân tích các biểu thức thành mã thông báo lớn nhất bằng cách sử dụng quy tắc bên trái.

Trong trường hợp này, biểu thức:

x-->0

Phân tích cú pháp token lớn nhất:

token 1: x
token 2: --
token 3: >
token 4: 0
conclude: x-- > 0

Quy tắc tương tự áp dụng cho biểu thức này:

a-----b

Sau khi phân tích cú pháp:

token 1: a
token 2: --
token 3: --
token 4: -
token 5: b
conclude: (a--)-- - b

Tôi hy vọng điều này sẽ giúp hiểu được biểu thức phức tạp ^^


98
Giải thích thứ hai của bạn là không chính xác. Trình biên dịch sẽ thấy a-----bvà suy nghĩ (a--)-- - b, không biên dịch vì a--không trả về giá trị.
Lá Tim

22
Ngoài ra, x--là hai mã thông báo riêng biệt.
Roland Illig

23
@DoctorT: nó vượt qua lexer. chỉ có ngữ nghĩa mới có khả năng phát ra lỗi đó. vì vậy lời giải thích của anh ấy là chính xác.
v.oddou

9
Miễn là bạn nghĩ -->là một nhà điều hành (đó là những gì ngụ ý khi có câu hỏi đã được hỏi), câu trả lời này hoàn toàn không hữu ích - bạn sẽ nghĩ mã thông báo 2 -->không chỉ là --. Nếu bạn biết đó -->không phải là một nhà điều hành, có lẽ bạn không gặp vấn đề gì khi hiểu mã trong câu hỏi, vì vậy, trừ khi bạn có một câu hỏi hoàn toàn khác, tôi không thực sự chắc chắn làm thế nào điều này có thể hữu ích.
Bernhard Barker

4
Ví dụ @DoctorT có thể đúng khi giả sử rằng ađã quá tải toán tử giảm sau, trả về giá trị. coliru.stacked-crooking.com/a/e1effc351ae79e9f
doc

275

Điều này giống hệt như

while (x--)
{
   printf("%d ", x);
}

cho các số không âm


153
Điều này có nên không for(--x++;--x;++x--)?
Mateen Ulhaq

9
@DoctorT đó là những gì unsigneddành cho
Cole Johnson

12
@MateenUlhaq, đó là sai theo tiêu chuẩn, biểu thức --x++có hành vi không xác định theo §1.9.15
WorldSEnder

Nếu nó được sử dụng unsigned, nó sẽ được sử dụng%u
Cacahuete Frito

242

Dù sao, bây giờ chúng ta có một nhà điều hành "đi đến". "-->"rất dễ được ghi nhớ như một hướng và "trong khi x về không" có nghĩa là thẳng.

Hơn nữa, nó hiệu quả hơn một chút so với "for (x = 10; x > 0; x --)"trên một số nền tảng.


17
Luôn luôn không thể đúng, đặc biệt khi giá trị của x là âm.
Ganesh Gopalasubramanian

15
Phiên bản khác không làm điều tương tự - với for (size_t x=10; x-->0; )phần thân của vòng lặp được thực thi với 9,8, .., 0 trong khi phiên bản khác có 10,9, .., 1. Thật khó để thoát khỏi một vòng lặp xuống 0 với một biến không dấu.
Pete Kirkham

4
Tôi nghĩ rằng điều này là một chút sai lệch ... Chúng tôi không có một nhà điều hành "đi đến" theo nghĩa đen, vì chúng tôi cần một người khác ++>để làm công việc gia tăng.
tslmy

19
@Josh: thực ra, tràn cho hành vi không xác định cho int, vì vậy nó có thể dễ dàng ăn con chó của bạn như đưa xvề 0 nếu nó bắt đầu tiêu cực.
SamB

3
Đây là một thành ngữ rất quan trọng đối với tôi vì lý do được đưa ra trong comnmet bởi @PeteKirkham, vì tôi thường cần phải thực hiện giảm các vòng lặp trên số lượng không dấu trong suốt quá trình 0. (Để so sánh, thành ngữ bỏ qua các bài kiểm tra về 0, chẳng hạn như viết while (n--)thay cho không dấu n, không mua gì cho tôi và đối với tôi rất nhiều cản trở khả năng đọc.) Nó cũng có một đặc tính dễ chịu mà bạn chỉ định nhiều hơn chỉ số ban đầu, thường là bạn muốn (ví dụ: đối với một vòng lặp trên một mảng bạn chỉ định kích thước của nó). Tôi cũng thích -->không có không gian, vì điều này làm cho thành ngữ dễ nhận ra.
Marc van Leeuwen

221

Mã này trước tiên so sánh x và 0 và sau đó giảm x. (Cũng đã nói trong câu trả lời đầu tiên: Bạn đang giảm x sau và sau đó so sánh x và 0 với >toán tử.) Xem đầu ra của mã này:

9 8 7 6 5 4 3 2 1 0

Bây giờ chúng ta trước tiên so sánh và sau đó giảm dần bằng cách thấy 0 trong đầu ra.

Nếu chúng ta muốn giảm đầu tiên và sau đó so sánh, hãy sử dụng mã này:

#include <stdio.h>
int main(void)
{
    int x = 10;

    while( --x> 0 ) // x goes to 0
    {
        printf("%d ", x);
    }
    return 0;
}

Đầu ra đó là:

9 8 7 6 5 4 3 2 1

177

Trình biên dịch của tôi sẽ in ra 9876543210 khi tôi chạy mã này.

#include <iostream>
int main()
{
    int x = 10;

    while( x --> 0 ) // x goes to 0
    {
        std::cout << x;
    }
}

Như mong đợi. Các while( x-- > 0 )phương tiện thực sự while( x > 0). Các x--bài giảm dần x.

while( x > 0 ) 
{
    x--;
    std::cout << x;
}

là một cách viết khác nhau của cùng một điều.

Thật là tốt khi bản gốc trông giống như "trong khi x đi về 0".


4
Kết quả chỉ không được xác định khi bạn tăng / giảm cùng một biến nhiều lần trong cùng một câu lệnh. Nó không áp dụng cho tình huống này.
Lá Tim

13
while( x-- > 0 ) actually means while( x > 0)- Tôi không chắc những gì bạn đang cố nói ở đó, nhưng cách bạn diễn đạt nó ngụ ý --không có ý nghĩa gì, điều này rõ ràng là rất sai.
Bernhard Barker

Để lái xe về nhà từ @Dukeling, câu trả lời này không giống với bài viết gốc. Trong bài viết gốc, xsẽ là -1sau khi nó rời khỏi vòng lặp, trong khi trong câu trả lời này, xsẽ là 0.
Đánh dấu Lakata

148

Có một khoảng trống bị thiếu giữa -->. xlà bài giảm dần, nghĩa là giảm dần sau khi kiểm tra điều kiện x>0 ?.


42
Không gian không bị thiếu - C (++) bỏ qua khoảng trắng.

27
@ H2CO3 Điều này không đúng nói chung. Có những nơi phải sử dụng khoảng trắng để phân tách mã thông báo, ví dụ như trong #define foo()so với #define foo ().
Jens

30
@Jens Làm thế nào về: "Không gian bị thiếu - C (++) bỏ qua khoảng trắng không cần thiết."?
Kevin P. Rice

139

--sụt điều hành và >lớn hơn-hơn toán tử.

Hai toán tử được áp dụng như một như một -->.


11
Chúng được áp dụng như 2 toán tử riêng biệt. Họ chỉ viết sai lệch để trông giống như "một người duy nhất".
gạch dưới

129

Đó là sự kết hợp của hai nhà khai thác. Đầu tiên --là để giảm giá trị và >để kiểm tra xem giá trị đó có lớn hơn toán hạng bên phải hay không.

#include<stdio.h>

int main()
{
    int x = 10;

    while (x-- > 0)
        printf("%d ",x);

    return 0;
}

Đầu ra sẽ là:

9 8 7 6 5 4 3 2 1 0            

122

Trên thực tế, xlà giảm sau và với điều kiện đó đang được kiểm tra. Không phải -->, đó là(x--) > 0

Lưu ý: giá trị của xđược thay đổi sau khi điều kiện được kiểm tra, vì nó giảm sau. Một số trường hợp tương tự cũng có thể xảy ra, ví dụ:

-->    x-->0
++>    x++>0
-->=   x-->=0
++>=   x++>=0

6
Ngoại trừ việc ++> khó có thể được sử dụng trong một thời gian (). Một toán tử "đi lên ..." sẽ là ++ <, trông không đẹp ở đâu cả. Toán tử -> là một sự trùng hợp hạnh phúc.
Florian F

2
@BenLeggiero Điều đó có thể 'hoạt động' theo nghĩa là tạo mã làm gì đó (trong khi gây khó chịu cho những độc giả không thích mã giả thông minh), nhưng ngữ nghĩa thì khác, vì việc sử dụng tiền thuật toán có nghĩa là nó sẽ thực thi ít lần lặp hơn. Như một ví dụ giả định, nó sẽ không bao giờ thực thi thân vòng lặp nếu xbắt đầu từ 1, nhưng while ( (x--) > 0 )sẽ. {chỉnh sửa} Eric Lippert bao phủ cả trong C # 4 ghi chú phát hành của mình: blogs.msdn.microsoft.com/ericlippert/2010/04/01/...
underscore_d

120

CC ++ tuân theo quy tắc "tối đa munch". Giống như cách a --- b được dịch sang (a--) - b, trong trường hợp của bạn x-->0dịch sang (x--)>0.

Những gì quy tắc nói về cơ bản là từ trái sang phải, các biểu thức được hình thành bằng cách lấy tối đa các ký tự sẽ tạo thành một biểu thức hợp lệ.


5
Đó là những gì OP giả định: rằng "((a) ->)" là munch tối đa. Hóa ra giả định ban đầu của OP là không chính xác: "->" không phải là toán tử hợp lệ tối đa.
David

4
Còn được gọi là phân tích tham lam, nếu tôi nhớ chính xác.
Roy Tinker

1
@RoyTinker Quét tham lam . Trình phân tích cú pháp không có gì để làm với điều này.
Hầu tước Lorne

27

Tại sao tất cả các biến chứng?

Câu trả lời đơn giản cho câu hỏi ban đầu chỉ là:

#include <stdio.h>
int main()
{
    int x = 10;
    while (x > 0) 
    {
        printf("%d ", x);
        x = x-1;
    }
}

Có làm điều tương tự. Không nói rằng bạn nên làm điều đó như thế này, nhưng nó làm điều tương tự và sẽ trả lời câu hỏi trong một bài.

x--chỉ là viết tắt cho những điều trên, và >chỉ là một bình thường lớn hơnoperator . Không có bí ẩn lớn!

Ngày nay có quá nhiều người làm những điều đơn giản trở nên phức tạp;)


17
Câu hỏi này không phải là về các biến chứng, mà là về ** Các tính năng ẩn và góc tối của C ++ / STL **
pix

20
Chương trình ở đây cung cấp đầu ra khác với bản gốc vì x ở đây bị giảm sau printf. Điều đó chứng tỏ tốt như thế nào "câu trả lời đơn giản" thường không chính xác.
Öö Tiib

2
The OP's way: 9 8 7 6 5 4 3 2 1 0The Garry_G way: 10 9 8 7 6 5 4 3 2 1
Anthony

2
Nó không làm điều tương tự. Di chuyển của bạn x=x-1trước printfđó sau đó bạn có thể nói "nó làm điều tương tự".
CITBL

26

Theo cách thông thường, chúng ta sẽ định nghĩa một điều kiện trong whilengoặc đơn vòng lặp ()và điều kiện kết thúc bên trong dấu ngoặc {}, nhưng -->định nghĩa cả hai cùng một lúc.

Ví dụ:

int abc(void)
{
    int a = 5
    while((a--) > 0) // Decrement and comparison both at once
    {
        // Code
    }
}

Điều này giảm avà chạy vòng lặp trong khi alớn hơn 0.

Thông thường, nó sẽ giống như:

int abc(void)
{
    int a = 5;
    while(a > 0)
    {
        a--;
        // Code
    }
    a--;
}

Cả hai cách, chúng tôi làm cùng một điều và đạt được cùng một mục tiêu.


5
Điều này là không chính xác. Mã trong câu hỏi thực hiện: 'test-write-exec' (kiểm tra trước, viết giá trị mới, thực hiện vòng lặp), ví dụ của bạn là 'test-exec-write'.
v010dya

@ v010dya Đã sửa câu trả lời, bây giờ test-write-executelà trong câu hỏi, cảm ơn vì đã chỉ ra!
Kotauskas

@VladislavToncharov Chỉnh sửa của bạn vẫn sai. Xem của tôi.
SS Anne

8

(x --> 0) có nghĩa (x-- > 0)

  1. bạn có thể dùng (x -->)
    output -: 9 8 7 6 5 4 3 2 1 0

  2. bạn có thể sử dụng (-- x > 0) Nó có nghĩa là(--x > 0)
    output -: 9 8 7 6 5 4 3 2 1

  3. bạn có thể dùng
(--\
    \
     x > 0)

output -: 9 8 7 6 5 4 3 2 1

  1. bạn có thể dùng
(\
  \
   x --> 0)

output -: 9 8 7 6 5 4 3 2 1 0

  1. bạn có thể dùng
(\
  \
   x --> 0
          \
           \
            )

output -: 9 8 7 6 5 4 3 2 1 0

  1. bạn cũng có thể sử dụng
(
 x 
  --> 
      0
       )

output -: 9 8 7 6 5 4 3 2 1 0

tương tự, bạn có thể thử nhiều phương thức để thực hiện lệnh này thành công

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.