ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [리눅스] - !!${변수} 의미
    Linux 2023. 8. 3. 02:23

    커널 코드를 보다 보면 `!!${변수}`로 된 코드를 간혹 볼 수 있다.

     

    일단 결론부터 말하면 저건 Bool 타입으로 사용하겠다는 의미이다.

        long l1 = 132;
        long l2 = -1232;
        long l3 = 0;
        printf("l1: %d, l2: %d, l3:%d\n", !!l1, !!l2, !!l3);
        
        int i1 = 132;
        int i2 = -1232;
        int i3 = 0;
        printf("i1: %d, i2: %d, i3:%d\n", !!i1, !!i2, !!i3);
        
        short s1 = 8938;
        short s2 = -22132;
        short s3 = 0;
        printf("s1: %d, s2: %d, s3:%d\n", !!s1, !!s2, !!s3);
        
        char c1 = 89;
        char c2 = -122;
        char c3 = 0;
        printf("c1: %d, c2: %d, c3:%d\n", !!c1, !!c2, !!c3);
        
        unsigned int ui1 = 92732743;
        unsigned int ui2 = 0;
        printf("ui1: %d, ui2: %d\n", !!ui1, !!ui2);
        
        unsigned char uc1 = 213;
        unsigned char uc2 = 0;
        printf("uc1: %d, uc2: %d\n", !!uc1, !!uc2);
        
        unsigned short us1 = 213;
        unsigned short us2 = 0;
        printf("us1: %d, us2: %d\n", !!uc1, !!uc2);
        
        float f1 = 4937.23423f;
        float f2 = -9937.2023f;
        float f3 = 0.0f;
        printf("f1: %d, f2: %d, f3: %d\n", !!f1, !!f2, !!f3);
        
        double d1 = 4937.23423;
        double d2 = -9937.2023;
        double d3 = 0.0;
        printf("d1: %d, d2: %d, d3: %d\n", !!d1, !!d2, !!d3);
        
        struct temp *p1 = NULL;
        struct temp *p2 = malloc(sizeof(struct temp));  
        printf("p1: %d, p2: %d\n", !!p1, !!p2);

    위의 코드의 결과값은 어떨까?

     

    l1: 1, l2: 1, l3:0
    i1: 1, i2: 1, i3:0
    s1: 1, s2: 1, s3:0
    c1: 1, c2: 1, c3:0
    ui1: 1, ui2: 0
    uc1: 1, uc2: 0
    us1: 1, us2: 0
    f1: 1, f2: 1, f3: 0
    d1: 1, d2: 1, d3: 0
    p1: 0, p2: 1

     

    포인터든 그냥 자료형이든 상관없이 Bool Type으로 만들어준다.

     

    'Linux' 카테고리의 다른 글

    [리눅스] boot process overview  (0) 2023.08.03
    [리눅스] 루프백 디바이스(/dev/loopXX)  (0) 2023.04.25
Designed by Tistory.