首页 > 其他分享 >2-9 在求对二的补码时,表达式 x &= (x – 1)可以删除 x 中最右边值为 1 的 一个二进制位,用这一方法重写 bitcount 函数,以加快其执行速度

2-9 在求对二的补码时,表达式 x &= (x – 1)可以删除 x 中最右边值为 1 的 一个二进制位,用这一方法重写 bitcount 函数,以加快其执行速度

时间:2023-07-29 10:33:06浏览次数:33  
标签:count bitcount 二进制位 补码 值为 29 int

Archlinux

GCC 13.1.1  20230429

2023-07-29 10:29:56 星期六

 


点击查看代码
#include<stdio.h>
#include<stdint.h>


int bitcount( uint8_t x )
{
    int count = 0;

    while( x != 0 )
    {
        x &= x-1;
        count ++;
    }

    return count;
}


int main()
{
    int c_in = 0;

    scanf("%d", &c_in);
    
    printf("%d\n", bitcount( c_in ) );
    


    return 0;
}


 


运行截图:

image

输出正确。

 


小白刚学习C语言,代码质量不高,欢迎评论。

标签:count,bitcount,二进制位,补码,值为,29,int
From: https://www.cnblogs.com/yuwu/p/17589387.html

相关文章

  • 原码反码补码
    原码为什么要用原码?计算机的存储是以二进制为基础的,因此正负号难以表示,所以,在二进制表示的基础上,选取最高位作为符号位;原码带来了什么问题? 1.出现了+0(00000000)和-0(10000000),明显不符合常理 2.关于负数和正数的计算是完全错误的,例如:-3(10000011)+1(00......
  • Verilog - 补码
    参考《计算机组成与设计第五版》1.二进制补码计算以64bit二进制补码为例。计算方法是:符号位乘以-2^63,然后其余位分别乘以他们各自基值的正值。如下图所示:对二进制补码求相反数将每bit数据从0转为1或从1转为0,然后对结果加1.正数二进制补码左边实际上是无限个......
  • 统计出整形数值二进制位里面包含的1的个数
    /*printfexample*/#include<stdio.h>intcount_one(intn){intcount=0;while(n){n=n&(n-1); count++;}returncount;}intmain(){inta=-1;printf("%d",count_one(a));return0;} 结果: ......
  • [ARM汇编]计算机原理与数制基础—1.1.3 二进制补码
    在计算机中,为了表示有符号整数(即正数和负数),通常采用二进制补码表示法。二进制补码不仅可以表示负数,还能简化计算机的加法和减法运算。接下来,我们将介绍二进制补码的概念及其计算方法。原码、反码和补码在讨论补码之前,我们先了解一下原码和反码的概念。原码:直接将一个有符号整......
  • 二进制下的补码、反码、原码——适用于有符号整数
    简单定义简单起见,我们这里只考虑三位二进制数所能表示的范围,即${-4,-3,-2,-1,0,\1,\2,\3}$。机器数和真值一个数在计算机中的二进制表现形式,就是这个数的机器数(相当于数的原码)。例如,$-3$的机器数即为$111$,$2$的机器数为$010$。机器数在考虑最高位为符号位的情况下......
  • #yyds干货盘点# LeetCode程序员面试金典:颠倒二进制位
    1.简述:颠倒给定的32位无符号整数的二进制位。提示:请注意,在某些语言(如Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在Java中,编译器使用二进制补码......
  • 二进制位交换,反转,与统计1的个数
    问题一:给一个整数v,求它的二进制表示中从右往左数第x位和第y位交换后的值(从0开始计数)。 分析:举个例子,如果v的二进制表示为XXXXaXXXXXXbX,我们交换第1位和第8位。我们是这样做的:先把这两位的值都取零后的值保存在一个变量里面,即tmp=XXXX0XXXXXX0X,然后再取ans=0000b000000a0,那么......
  • 原码,补码,反码
    在计算机系统中,数值都是用补码来存储的。主要原因是:使用补码,可以将符号位和其它位统一处理,同时,减法也可以按照加法来处理,如果最高位有进位,则进位被舍弃。以一个字节为例正数的补码和反码都跟原码是相同的。对于负数则不同,负数的反码是将原码除符号位以外的各位取反,而负数的补码则是......
  • 计算机基础中什么是原码,反码,补码和移码?各自有什么用途?
    在计算机基础中,原码、反码、补码和移码是用于表示和处理有符号整数的编码方式。它们各自具有不同的定义和用途。在本文中,我将详细解释每种编码方式,并提供实际例子以加深理解。原码(Sign-MagnitudeRepresentation):原码是最简单的整数表示方法,直接使用二进制表示数值,并用最高位表......
  • 原码和补码
    原码和补码1.原码原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值[+1]原=00000001[-1]原=10000001第一位是符号位.因为第一位是符号位,所以8位二进制数的取值范围就是:[11111111,01111111],即[-127,127]2.补码补码的表示方法是:正数的补码......