为什么我不能正确打印二进制数?

时间:2016-09-13 20:58:34

标签: c binary

我想使用下面的程序打印一个数字,但它从来没有正确打印,我找不到问题,你能帮帮我吗?

all_method_values = []
for obj in Model2.objects.all():
    all_method_values.append(Model1.get_gallery_url(obj.user.user_url, obj.gallery.slug))

1 个答案:

答案 0 :(得分:2)

您的代码还有其他问题,但主要问题是您的if声明。

if (value & mask == 1)

有两个问题:

  1. ==优先级高于&,因此解析时就像编写value & (mask == 1)一样。但是你想首先进行掩蔽,然后进行比较,所以你必须写(value & mask) == 1

  2. 当您进行屏蔽时,通常不会获得1。当屏蔽位置1时,您将在该位获得一个1的数字,而不是最低位。不使用== 1,而是使用!= 0来查看该位是否已设置。您也可以使用(value & mask) == mask

  3. 将该行更改为:

    if ((value & mask) != 0)
    
    它通常会起作用。

    但是,您的代码具有实现定义的行为,因为您正在对有符号整数变量执行位操作。在32位系统上,0x80000000溢出int的最大值,并且执行定义的有符号数的移位。将valuemask更改为unsigned int,一切都应该没问题。