十进制的逻辑运算

本文介绍了逻辑运算的基本概念及运算规则,包括与、或、非、异或、同或等,并通过实例演示了如何进行十进制到二进制的转换及逻辑运算的过程。此外还介绍了使用n&(n-1)来计算一个整数二进制表示中1的个数的方法。
部署运行你感兴趣的模型镜像

逻辑预算包含与,或,非,异或等运算.其基本规则为:
与:其中有一个为0,结果为0
或:其中有一个为1,结果为1
非(单目运算):取反
异或:相同为0,相异为1
同或:相同为1,相异为0

十进制的逻辑运算的步骤:
(1)第一步:将十进制数值转换为二进制
(2)第二步:执行相应的逻辑运算
(3)第三步:将计算得到的二进制结果转换为10进制返回.
以异或为例:
8 = 1000
6 = 110
1000
⊕ 0110
= 1110 —>(转为10进制为) 14
最后输出的答案也是14.
其他的逻辑运算相同.

这里在介绍下n&(n-1)的作用

n&(n-1)每次将n的二进制数值最后出现的1变为0
比如 n = 6 , (n-1) = 5
110&101= 100
n = 7, n-1=6
111&110 = 110
这样可以利用n&(n-1)来求出整数n的二进制数值中存在多少个1
java程序如下:

public static int numOf1(int n){
    int count = 0;
    while(n != 0){
        n = n & (n-1);
        count ++;
    }
    return count;
}

您可能感兴趣的与本文相关的镜像

Kotaemon

Kotaemon

AI应用

Kotaemon 是由Cinnamon 开发的开源项目,是一个RAG UI页面,主要面向DocQA的终端用户和构建自己RAG pipeline

### 原代码分析 从给定的引用中,可以整理出一些二进制逻辑运算相关的代码: - **右移运算计算二进制表示**:通过右移和运算获取一个数的二进制表示 [^1]。 ```python a = 13 c = [] for i in range(4): b = a >> i & 1 c.append(b) print("c 的二进制表示为:", c[::-1]) ``` - **二进制减法(使用补码)**:通过补码运算实现二进制减法 [^2]。 ```python def twos_complement(n: int, bits: int = 8) -> int: if n >= 0: return n return (1 << bits) + n def binary_subtract(x: int, y: int, bits: int = 8) -> int: y_neg = twos_complement(-y, bits) total = x + y_neg mask = (1 << bits) - 1 return total & mask ``` - **判断奇偶性**:通过运算判断一个数的奇偶性 [^3]。 ```python if(n & 1 == 1): # n 是个奇数 pass ``` - **按位异或运算**:对列表中的元素进行按位异或运算 [^4]。 ```python items = [1, 4, 5, 4, 1, 3, 5] result = 0 for item in items: result ^= item print(result) ``` - **自定义二进制异或运算**:将二进制字符串转换为整数进行异或运算,再转换回二进制字符串 [^5]。 ```python def dec2bin(dec): result = '' if dec: result = dec2bin(dec // 2) return result + str(dec % 2) else: return result def xor(x, y): return int(x, 2) ^ int(y, 2) x = xor('00100111', '10010101') print(dec2bin(x)) ``` ### 优化后的代码 ```python # 二进制运算 def binary_and(x: int, y: int) -> int: return x & y # 二进制或运算 def binary_or(x: int, y: int) -> int: return x | y # 二进制非运算 def binary_not(n: int, bits: int = 8) -> int: return ~n & ((1 << bits) - 1) # 二进制异或运算 def binary_xor(x: int, y: int) -> int: return x ^ y # 十进制转二进制字符串 def dec_to_bin(dec: int, bits: int = 8) -> str: return bin(dec & ((1 << bits) - 1))[2:].zfill(bits) # 示例使用 x = 0b00100111 y = 0b10010101 # 运算 and_result = binary_and(x, y) print(f"运算结果: {dec_to_bin(and_result)}") # 或运算 or_result = binary_or(x, y) print(f"或运算结果: {dec_to_bin(or_result)}") # 非运算 not_result_x = binary_not(x) print(f"非运算结果 (x): {dec_to_bin(not_result_x)}") # 异或运算 xor_result = binary_xor(x, y) print(f"异或运算结果: {dec_to_bin(xor_result)}") ``` ### 优化说明 - **封装函数**:将不同的二进制逻辑运算封装成独立的函数,提高代码的可读性和可维护性。 - **统一二进制表示**:使用 `bin()` 函数和 `zfill()` 方法将十进制数转换为指定长度的二进制字符串,避免递归调用。 - **掩码处理**:在非运算中使用掩码确保结果在指定的位数内。 ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值