1. Tuyển Mod quản lý diễn đàn. Các thành viên xem chi tiết tại đây

Lập trình-Sự hứng thú của ngôn ngữ-Vào đây để được vote

Chủ đề trong '1981 - Hội Gà Sài Gòn' bởi xinchen, 21/05/2004.

  1. 0 người đang xem box này (Thành viên: 0, Khách: 0)
  1. xinchen

    xinchen Thành viên mới

    Tham gia ngày:
    21/04/2004
    Bài viết:
    87
    Đã được thích:
    0
    Lập trình-Sự hứng thú của ngôn ngữ-Vào đây để được vote

    Để một số người khỏi dụ dỗ bà con vote cho mình. xinchen xin bày ra một trò chơi thú vị. Chúng ta vừa có thể học hỏi vừa được vote nếu đủ sức.
    Mỗi tuần, xinchen sẽ cố gắng đưa ra một câu đố về ngôn ngữ lập trình, các bạn đặc biệt là dân IT hãy thử giải thích. Câu trả lời hợp lí nhất sẽ mang về cho chủ nhân của nó 5 sao do xinchen vote. Mong rằng trailangtu có thể kiếm chác một ít ở đây.
    Kì 1:
    void main()
    {
    int value1 = 0xFFFFFFFF >> 1;
    int value2 = -1 >> 1;

    unsigned int value3 = 0xFFFFFFFF >> 1;
    unsigned int value4 = -1 >> 1;

    printf("%x
    ",value1);
    printf("%x
    ",value2);
    printf("%x
    ",value3);
    printf("%x
    ",value4);
    }
    Màn hình xuất ra:
    7FFFFFFF
    FFFFFFFF
    7FFFFFFF
    FFFFFFFF
    Kết quả value1 và value3 là đúng, còn value2 và value4 thì sai(phép toán dịch phải 1 bit không có tác dụng). Tại sao?
  2. julie06

    julie06 Thành viên mới

    Tham gia ngày:
    13/05/2003
    Bài viết:
    937
    Đã được thích:
    0
    Cái này chơi hổng có fair Bị mấy người hông phải trong dân lập trình là coi như chít nghéc. Mà hông phải trong dân lập trình thì có bít gì đâu mà vote èh
    Xo gi, em nói nhảm á ! thoai iem đi ge
    Chúc vui hỉ !
  3. zopo

    zopo Thành viên rất tích cực

    Tham gia ngày:
    19/09/2003
    Bài viết:
    2.275
    Đã được thích:
    0
    hơ hơ em là dân quản trị mà đâu có biết lập trình .... ??? vậy thì làm sao mà được ... vote nhờ .... không công bằng !!
  4. aiti

    aiti Thành viên mới

    Tham gia ngày:
    01/09/2003
    Bài viết:
    101
    Đã được thích:
    0
    Ặc ặc ,có thế mà Pác cũng đưa ra nữa nhi?
    True X true--->true
    False X true---> F
    T X F ----> F
    F X F ---->T
    0 X FFFF --->T
    -1=F thì là F
  5. tan9c6

    tan9c6 Thành viên mới

    Tham gia ngày:
    30/12/2001
    Bài viết:
    25
    Đã được thích:
    0
    aiti chưa hiểu được ý định của xinchen rồi.
    Trong ngôn ngữ C thì số không và chữ x trước một hằng số là để báo cho biết tiếp theo là một hằng số dưới dạng hexa.
    Có thể xinchen ghi dưới dạng hexa để mọi người dễ theo dõi hơn vì ở đây sử dụng các phép toán dịch bit mà số hexa thì đổi sang nhị phân dễ hơn và cũng thể hiện rõ kích thước của biến. Ví dụ như số nguyên ở đây là 4 byte=32 bit(8 chữ số hexa).
    Mình vẫn chưa tìm ra nguyên nhân, xinchen chờ vài hôm nữa đi nhất định sẽ có...
  6. Tao_lao

    Tao_lao Thành viên rất tích cực

    Tham gia ngày:
    17/04/2002
    Bài viết:
    2.152
    Đã được thích:
    1
    Có phải tại vì phép dịch chuyển phải (shift right) của số nguyên có dấu (int) và không dấu (unsigned int) là khác nhau?
  7. christy166

    christy166 Thành viên mới

    Tham gia ngày:
    31/12/2002
    Bài viết:
    1.297
    Đã được thích:
    0
    Để cho công bằng xinchen@ nên đưa ra một số câu hỏi khác để các bạn không phải dân IT có thể trả lời được.
    Câu trên thì Christy chịu thôi. Sao không làm câu hỏi trả lời lựa chọn nhỉ. hihì
  8. aiti

    aiti Thành viên mới

    Tham gia ngày:
    01/09/2003
    Bài viết:
    101
    Đã được thích:
    0
    Bo'' tay ,bo'' chan lun
  9. Kojiro

    Kojiro Thành viên mới

    Tham gia ngày:
    16/01/2003
    Bài viết:
    77
    Đã được thích:
    0
    Kojiro không giỏi tiếng Anh, chưa hiểu hết
    (MSDN)
    The value of n>>s is n right-shifted s bit positions with sign-extension. The resulting value is [n/2^s]. For nonnegative values of n, this is equivalent to truncating integer division, as computed by the integer division operator /, by two to the power s.
    The value of n>>>s is n right-shifted s bit positions with zero-extension. If n is positive, then the result is the same as that of n>>s; if n is negative, the result is equal to that of the expression (n>>s)+(2<<~s) if the type of the left-hand operand is int, and to the result of the expression (n>>s)+(2L<<~s) if the type of the left-hand operand is long. The added term (2<<~s) or (2L<<~s) cancels out the propagated sign bit. (Note that, because of the implicit masking of the right-hand operand of a shift operator, ~s as a shift distance is equivalent to 31-s when shifting an int value and to 63-s when shifting a long value.)
  10. suxikhoi

    suxikhoi Thành viên mới

    Tham gia ngày:
    30/10/2003
    Bài viết:
    85
    Đã được thích:
    0
    hơ hơ hiểu được chít lìn
    Má tớ dặn không nên cố gắng xem những thứ không hiểu coi chừng bị ... sờ chét và viêm não ấy

Chia sẻ trang này