给别人做网站做什么科目,百度pc端入口,东台网站开发,可以做烟的网站吗前言
位操作允许直接在二进制层面上直接操作整数的各个位#xff0c;使用位操作解决问题能降低很多时间和空间复杂度#xff0c;以很低的成本很优雅的解决问题#xff0c;不过有着一定的学习成本。
正文
负数和二进制表示
知识补充#xff1a;
在计算机中#xff0c;…前言
位操作允许直接在二进制层面上直接操作整数的各个位使用位操作解决问题能降低很多时间和空间复杂度以很低的成本很优雅的解决问题不过有着一定的学习成本。
正文
负数和二进制表示
知识补充
在计算机中整数用二进制表示。正整数的表示直观而负数的表示则使用二进制补码形式。这种表示方式让加法和减法能够使用相同的硬件电路处理并且有效地使用位操作进行数学运算。
原码数的直接二进制表示正数最高位是0负数最高位是1称为“符号位”。反码正数的反码与原码相同负数的反码是其原码的符号位保持不变其他位取反。补码正数的补码与原码相同负数的补码是其反码最低位加1。
例如对于8位二进制数5 的原码是 0000 0101而-5 的原码是 1000 0101反码是 1111 1010补码是 1111 1011。
位操作和运算符 按位与 用法a b功能只有当两个操作数的相应位都为1时结果位才为1。示例5 3 即 101 011的结果是 1001。 按位或| 用法a | b功能两个操作数的相应位中只要有一个为1结果位就为1。示例5 | 3 即 101 | 011的结果是 7111。 按位异或^ 用法a ^ b功能两个操作数的相应位不同时结果位为1。示例5 ^ 3 即 101 ^ 011的结果是 6110。 按位取反~ 用法~a功能操作数的每一位都反转1变00变1。注意在Python中~a 等于 -a - 1。示例~5 的结果是 -6因为在32位整数表示中5是...000101取反是...111010。 左移 用法a n功能将a的二进制表示向左移动n位右侧空位用0填充。示例5 1 的结果是 101010。 右移 用法a n功能将a的二进制表示向右移动n位。注意Python中的右移是算术右移对于有符号整数左侧空位填充符号位。示例-5 1 在Python中的结果是 -3。 赋值运算 包括、|、^、、它们分别对应按位与、按位或、按位异或、左移和右移的赋值操作。示例a b 等同于 a a b。
循环与位操作
一些技巧
使用for i in range(32)进行循环是处理32位整型数位操作的常见技巧逐位检查、设置或反转整数的特定位。
实战力扣
颠倒给定的 32 位无符号整数的二进制位。
提示
请注意在某些语言如 Java中没有无符号整数类型。在这种情况下输入和输出都将被指定为有符号整数类型并且不应影响您的实现因为无论整数是有符号的还是无符号的其内部的二进制表示形式都是相同的。在 Java 中编译器使用二进制补码记法来表示有符号整数。因此在 示例 2 中输入表示有符号整数 -3输出表示有符号整数 -1073741825。
示例 1
输入n 00000010100101000001111010011100
输出964176192 (00111001011110000010100101000000)
解释输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596 因此返回 964176192其二进制表示形式为 00111001011110000010100101000000。
示例 2
输入n 11111111111111111111111111111101
输出3221225471 (10111111111111111111111111111111)
解释输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293因此返回 3221225471 其二进制表示形式为 10111111111111111111111111111111 。
class Solution:# param n, an integer# return an integerdef reverseBits(self, n):result 0for _ in range(32):result 1result | n 1n 1return result