vs 2008 建立网站,百度竞价查询,做网站 傻瓜软件,南昌珠峰网站建设二进制中1的个数
问题描述#xff1a; 输入一个整数 n #xff0c;输出该数 32 位二进制表示中 1 的个数。其中负数用补码表示。 科普一下有符号数的三种表示#xff1a;原码、反码和补码#xff0c;可能有时候遗忘了。 真值#xff1a;带有符号位的机器数#xff08;一…二进制中1的个数
问题描述 输入一个整数 n 输出该数 32 位二进制表示中 1 的个数。其中负数用补码表示。 科普一下有符号数的三种表示原码、反码和补码可能有时候遗忘了。 真值带有符号位的机器数一个数在计算机中的二进制表示形式机器数是带符号的计算机用一个数的最高位存放符号0表示正数1表示负数对应的真正数值。
原码符号位加上真值的绝对值。反码正数的反码是它本身负数的反码对其原码逐位取反符号位除外。补码正数的补码是它本身负数的补码等于反码1符号位除外。
负数的补码是能够和其相反数相加通过溢出从而使计算机内计算结果变为0的二进制码。比如 1 ( − 1 ) 0 1(-1)0 1(−1)0 借鉴的解题思路 方法1循环按位比较法 1遍历二进制的32位通过移位0-31次实现 2将移位后的1与数字进行位与运算结尾为1就记录一次。 补充知识Python按位与操作 Python按位与操作是一种位运算操作它用于对二进制数位进行操作。在Python中使用按位与符号“”来进行运算对两个二进制数的每一个数位进行比较只有当两个对应数位都为1时结果才为1否则为0。 Python中 和 都是位运算是左移是右移。x 1是将x的二进制表示左移一位相当于原数x乘2。比如整数4在二进制下是10041左移1位变成1000(二进制)结果是8。同理是右移右移1位相当于除以2。 主要用途对二进制表示的数字进行处理。 按位与操作的特点 1、当两个操作数的对应的二进制位都为1时结果为1。 2、当两个操作数的对应的二进制位只要有一个为0时结果为0。 3、按位与操作还可以用于清零特定的位数。例如如果将1左移n个二进制位得到的结果是只有第n个二进制位是1其余都是0的数那么对任意一个二进制数进行按位与操作只有第n个二进制位上的数字会被保留下来其余的数字都会被清零。
def NumberOf1(n: int)-int:res 0# 遍历32位for i in range(32):# 按位比较按位与操作if (n (1 i)) ! 0:res 1return res方法2位运算优化法 解题思路 有一个性质 KaTeX parse error: Expected EOF, got at position 2: n̲(n-1)会将 n n n 的二进制中最低位由1变为0。 具体实现方法 1.使用循环检查 n n n 是否为0 2.不为0就与 n − 1 n-1 n−1 做位与运算去掉二进制最后一位的1并统计次数。
def NumberOf1(n):res 0# 负数转换if n 0:n 0xffffffff# n 0时停止比较while n:n n-1res 1return res