Hướng dẫn python cast to unsigned int - python cast thành unsigned int

Bạn có thể sử dụng thư viện tích hợp

-11010010000110000011000

11111111100101101111001111101000
1 Python:

Encode:

import struct

i = -6884376
print('{0:b}'.format(i))

packed = struct.pack('>l', i)  # Packing a long number.
unpacked = struct.unpack('>L', packed)[0]  # Unpacking a packed long number to unsigned long
print(unpacked)
print('{0:b}'.format(unpacked))

Out:

-11010010000110000011000

11111111100101101111001111101000

Decode:

dec_pack = struct.pack('>L', unpacked)  # Packing an unsigned long number.
dec_unpack = struct.unpack('>l', dec_pack)[0]  # Unpacking a packed unsigned long number to long (revert action).
print(dec_unpack)

Out:

-6884376

[NOTE]:NOTE]:

  • -11010010000110000011000
    
    11111111100101101111001111101000
    
    2 là hoạt động lớn.
  • -11010010000110000011000
    
    11111111100101101111001111101000
    
    3 dài.
  • -11010010000110000011000
    
    11111111100101101111001111101000
    
    4 là không dấu dài.
  • Trong kiến ​​trúc
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    5
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    6 và
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    7 lần lượt là 32bit, vì vậy bạn có thể sử dụng
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    8 và
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    9 thay vì
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    3 và
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    4.

[UPDATE]

Theo nhận xét @hl037_, cách tiếp cận này hoạt động trên Int32 không Int64 hoặc Int128 khi tôi sử dụng thao tác dài vào

dec_pack = struct.pack('>L', unpacked)  # Packing an unsigned long number.
dec_unpack = struct.unpack('>l', dec_pack)[0]  # Unpacking a packed unsigned long number to long (revert action).
print(dec_unpack)
2. Tuy nhiên, trong trường hợp của Int64, mã bằng văn bản sẽ được thay đổi chỉ đơn giản là sử dụng toán hạng dài dài (
dec_pack = struct.pack('>L', unpacked)  # Packing an unsigned long number.
dec_unpack = struct.unpack('>l', dec_pack)[0]  # Unpacking a packed unsigned long number to long (revert action).
print(dec_unpack)
3) trong
-11010010000110000011000

11111111100101101111001111101000
1 như sau:

Encode:

i = 9223372036854775807  # the largest int64 number
packed = struct.pack('>q', i)  # Packing an int64 number
unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
print(unpacked)
print('{0:b}'.format(unpacked))

Out:

9223372036854775807
111111111111111111111111111111111111111111111111111111111111111

Tiếp theo, làm theo cùng một cách cho giai đoạn giải mã. Cũng như điều này, hãy ghi nhớ

dec_pack = struct.pack('>L', unpacked)  # Packing an unsigned long number.
dec_unpack = struct.unpack('>l', dec_pack)[0]  # Unpacking a packed unsigned long number to long (revert action).
print(dec_unpack)
5 và
dec_pack = struct.pack('>L', unpacked)  # Packing an unsigned long number.
dec_unpack = struct.unpack('>l', dec_pack)[0]  # Unpacking a packed unsigned long number to long (revert action).
print(dec_unpack)
6

Nhưng trong trường hợp của Int128, tình hình hơi khác nhau vì không có toán hạng 16 byte cho

dec_pack = struct.pack('>L', unpacked)  # Packing an unsigned long number.
dec_unpack = struct.unpack('>l', dec_pack)[0]  # Unpacking a packed unsigned long number to long (revert action).
print(dec_unpack)
2. Do đó, bạn nên chia số của mình thành hai INT64.

Đây là cách nó nên được:

i = 10000000000000000000000000000000000000  # an int128 number
print(len('{0:b}'.format(i)))
max_int64 = 0xFFFFFFFFFFFFFFFF
packed = struct.pack('>qq', (i >> 64) & max_int64, i & max_int64)
a, b = struct.unpack('>QQ', packed)
unpacked = (a << 64) | b
print(unpacked)
print('{0:b}'.format(unpacked))

Out:

123
10000000000000000000000000000000000000
111100001011110111000010000110101011101101001000110110110010000000011110100001101101010000000000000000000000000000000000000

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọc-(2^31) = -2147483648 to (2^31) – 1=2147483647 which contains positive or negative numbers. It is represented in two’s complement notation. An unsigned integer is a 32-bit non-negative integer(0 or positive numbers) in the range of 0 to 2^32-1.  So, in this article let us know how to convert signed integer to unsigned integer in python.

    Bàn luậnAdd 2^32(or 1 << 32) to a signed integer to convert it to an unsigned integer

    Python3

    Python chứa các loại dữ liệu số tích hợp dưới dạng int (số nguyên), float và phức tạp. So với lập trình C, Python không ký và số nguyên không dấu dưới dạng loại dữ liệu. Không cần chỉ định các loại dữ liệu cho các biến trong Python vì bản thân trình thông dịch dự đoán loại dữ liệu biến dựa trên giá trị được gán cho biến đó. Kiểu dữ liệu INT trong Python chỉ đơn giản giống như số nguyên đã ký. & nbsp; Một số nguyên đã ký là một số nguyên 32 bit trong phạm vi -(2^31) = -2147483648 đến (2^31) -1 = 2147483647 có chứa số dương hoặc âm. Nó được đại diện trong hai ký hiệu bổ sung. Một số nguyên không dấu là số nguyên không âm 32 bit (0 hoặc số dương) trong phạm vi từ 0 đến 2^32-1. & nbsp; Vì vậy, trong bài viết này, hãy cho chúng tôi biết cách chuyển đổi số nguyên đã ký sang số nguyên không dấu trong Python.

    Ví dụ 1: Thêm 2^32 (hoặc 1 <32) vào một số nguyên đã ký để chuyển đổi nó thành một số nguyên không dấu

    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    0
    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    1

    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    0
    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    3
    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    4
    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    5

    Output:

    4294967196
    

    dec_pack = struct.pack('>L', unpacked)  # Packing an unsigned long number.
    dec_unpack = struct.unpack('>l', dec_pack)[0]  # Unpacking a packed unsigned long number to long (revert action).
    print(dec_unpack)
    
    8
    dec_pack = struct.pack('>L', unpacked)  # Packing an unsigned long number.
    dec_unpack = struct.unpack('>l', dec_pack)[0]  # Unpacking a packed unsigned long number to long (revert action).
    print(dec_unpack)
    
    9
    -6884376
    
    0
    -6884376
    
    1
    Using Bitwise left shift(<<) operator

    -6884376
    
    2
    dec_pack = struct.pack('>L', unpacked)  # Packing an unsigned long number.
    dec_unpack = struct.unpack('>l', dec_pack)[0]  # Unpacking a packed unsigned long number to long (revert action).
    print(dec_unpack)
    
    9
    -6884376
    
    4
    -6884376
    
    5
    -6884376
    
    6
    -6884376
    
    7
    -6884376
    
    7
    -6884376
    
    9
    It performs bit manipulation by shifting the left operand bits of the number to the left and fills 0 on voids left as a result. 

    Ví dụ 2: Sử dụng ca bên trái bitwise (

    Bitwise bên trái Shift: Nó thực hiện thao tác bit bằng cách chuyển các bit toán hạng bên trái của số sang trái và điền 0 trên các khoảng trống còn lại. & NBSP;

    Python3

    & nbsp; ví dụ, x

    Còn lại dịch chuyển số nguyên ‘X, với số nguyên của y. Nó giống như nhân x với 2 được nâng lên thành công suất của y (2 ** y).

    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    0
    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    1

    Output:

    4294967295

    dec_pack = struct.pack('>L', unpacked)  # Packing an unsigned long number.
    dec_unpack = struct.unpack('>l', dec_pack)[0]  # Unpacking a packed unsigned long number to long (revert action).
    print(dec_unpack)
    
    8
    dec_pack = struct.pack('>L', unpacked)  # Packing an unsigned long number.
    dec_unpack = struct.unpack('>l', dec_pack)[0]  # Unpacking a packed unsigned long number to long (revert action).
    print(dec_unpack)
    
    9
    -6884376
    
    0
    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    9

    Python3

    -6884376
    
    2
    dec_pack = struct.pack('>L', unpacked)  # Packing an unsigned long number.
    dec_unpack = struct.unpack('>l', dec_pack)[0]  # Unpacking a packed unsigned long number to long (revert action).
    print(dec_unpack)
    
    9
    -6884376
    
    4
    -6884376
    
    5
    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    3
    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    9
    9223372036854775807
    111111111111111111111111111111111111111111111111111111111111111
    
    6
    -6884376
    
    9
    9223372036854775807
    111111111111111111111111111111111111111111111111111111111111111
    
    8

    Còn lại dịch chuyển số nguyên ‘X, với số nguyên của y. Nó giống như nhân x với 2 được nâng lên thành công suất của y (2 ** y).

    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    0
    i = 9223372036854775807  # the largest int64 number
    packed = struct.pack('>q', i)  # Packing an int64 number
    unpacked = struct.unpack('>Q', packed)[0]  # Unpacking signed to unsigned
    print(unpacked)
    print('{0:b}'.format(unpacked))
    
    1

    Output:

    -11010010000110000011000
    
    11111111100101101111001111101000
    
    0

    Làm thế nào để tôi chọn vào int không dấu?

    Để chuyển đổi một số nguyên đã ký thành một số nguyên không dấu hoặc để chuyển đổi một số nguyên không dấu thành một số nguyên đã ký, bạn chỉ cần sử dụng một diễn viên. Ví dụ: int a = 6; không dấu int b; int c; b = (không dấu int) a; c = (int) b; Trên thực tế trong nhiều trường hợp bạn có thể phân phối với các diễn viên.use a cast. For example: int a = 6; unsigned int b; int c; b = (unsigned int)a; c = (int)b; Actually in many cases you can dispense with the cast.

    Làm thế nào để bạn nhận được int không dấu trong Python?

    Một số nguyên có chữ ký là một số nguyên 32 bit trong phạm vi -(2^31) = -2147483648 đến (2^31) -1 = 2147483647 có chứa số dương hoặc âm.Nó được đại diện trong ký hiệu bổ sung của hai.Một số nguyên không dấu là số nguyên không âm 32 bit (0 hoặc số dương) trong phạm vi từ 0 đến 2^32-1.An unsigned integer is a 32-bit non-negative integer(0 or positive numbers) in the range of 0 to 2^32-1.

    Bạn có thể đúc một chuỗi vào một int in python không?

    Để chuyển đổi hoặc đúc, một chuỗi thành một số nguyên trong Python, bạn sử dụng hàm tích hợp int ().Hàm nhận được như một tham số, chuỗi ban đầu bạn muốn chuyển đổi và trả về số nguyên tương đương với giá trị bạn đã vượt qua.you use the int() built-in function. The function takes in as a parameter the initial string you want to convert, and returns the integer equivalent of the value you passed.

    Điều gì xảy ra khi bạn chuyển một int vào một int không dấu?

    Bạn có thể chuyển đổi một int thành int không dấu.Việc chuyển đổi là hợp lệ và được xác định rõ.Vì giá trị là âm, UINT_MAX + 1 được thêm vào để giá trị là số lượng không dấu hợp lệ.(Về mặt kỹ thuật, 2N được thêm vào nó, trong đó n là số bit được sử dụng để biểu diễn loại không dấu.)UINT_MAX + 1 is added to it so that the value is a valid unsigned quantity. (Technically, 2N is added to it, where N is the number of bits used to represent the unsigned type.)