神奇的位操作

基本知识:

& 位与操作

|  位或操作

^ 按位异或操作

~ 位非操作

计算机中数字有原码,反码,补码三种存储格式,通常都是补码形式;

一个正数的原码,反码和补码相同;一个负数,符号位为1,其余各位对原码按位取反,然后加1;

技巧总结:

1、n & (n - 1)可以去掉n位表示中的最后一个1,利用这个可以统计一个数的二进制表示中1的个数;

2、每个数乘以2,就相当于向左移动一位。所以2的n次幂就是1向左移动n位;

3、异或操作

a ^ b ^ b = a ^ (b ^ b) = a ^ 0 = a;

a ^ b = b ^ a;

4、已知负数补码,求该十进制负数。假设补码用N表示,则十进制数位(~N)+1;

时间: 2024-12-05 09:33:46

神奇的位操作的相关文章

c语言的位操作

c语言的位操作最常用的地方就是用在对寄存器的写值上. 一.基本的一些概念 1.位与:& 操作:1 & 1 = 1: 1 & 0 = 0: 0 & 0 = 0: 特点:只有全是1的时候才是1,其他情况都是0. 总结:任何数和0位与就是0,和1位与没有变化,所以位与常用在清零上(清零用位与). 2.位或:| 操作:1 | 1 = 1: 1 | 0 = 1: 0 | 0 = 0: 特点:只有全0的时候才是0,其他情况都是1. 总结:任何数和1位或就是1,和0位或没有变化,所以位或

位操作的技巧

一,基本概念认知 1,为啥要用补码 计算机中的符号数有三种表示方法,即原码.反码和补码.三种表示方法均有符号位和数值位两部分,符号位都是用0表示"正",用1表示"负",而数值位,三种表示方法各不相同. 在计算机系统中,数值一律用补码来表示和存储.原因在于,使用补码,可以将符号位和数值域统一处理:同时,加法和减法也可以统一处理.此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路.(来自百度百科) 2,补码的求法: 正数的补码和原码相同: 负数是对应正数

C/C++位操作

异或:不同为1,相同为0.可以记为:"异"为不同,不同为1. C方式位操作总结: 设置特定的位用|; 清除特定的位用&; 取反特定的位用; 取反所有的位用~; 引用自

在32位、64位操作系统下各数据类型所占的字节数

点击打开链接 在32位.64位系统当中,唯一改变的是指针的长度;在32位系统当中是4个字节.64位则是8个字节.所谓的32位.64位,这个指的是寄存器的位宽. 32位平台下结果: 64位平台下结果: 一.下面几点是值得大家注意的: 1.关于 int 的取值范围,缺省的int数值范围是由编译器设计者决定的,通常都是机器最为自然高效的位数.甚至,我们在32位的机器上,前提没有什么指令可以高效的的处理更短的整型值,我们可以将short.int.long都设置成32位. 2.浮点数在缺省的情况下 表示的

东方14模拟赛之noip2015/day1/3/神奇的幻方

总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  128000kB 描述 幻方是一种很神奇的N*N 矩阵:它由数字 1,2,3, … …,N*N 构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将 1 写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K= 2,3, …,N*N ): 若 (K−1) 在第一行但不在最后一列,则将K填在最后一行,(K−1) 所在列的右一列: 若 (K−1) 在最

【第二章】神奇的张大炮

一只剃了毛的猫崽和一条受了伤的手臂能做什么? 十个人里有九个人觉得剃了毛的猫崽应该埋到土里喂蚯蚓. 十个人里有九个人认为手臂受了伤应该去医院. 可是偏偏十个人里还剩下一个,这第十位不但认为剃了毛的猫崽和受了伤的手臂可以做文章,简直可以做大文章. 不但可以做大文章,简直还可以赚大钱. 最关键的是,他不但做了大文章,还赚了大钱. 因为这第十位不是别人,就是这位神奇的张大炮. 当一个人被认为神奇的时候,他就必定有了称得上神奇的地方. 张大炮就有张大炮神奇的地方. 张大炮神奇的地方实在不少,他的脏实在只

关于java按位操作运算

<1>.在了解位移之前,先了解一下正数和负数的二进制表示形式以及关系:举例15和-15: 15 的原码: 00000000 00000000 00000000 00001111     补码: 11111111 11111111 11111111 11110000                 +1 = -15的原码:11111111 11111111 11111111 11110001 负数的原码即为:正数的原码取反,再加1. <2>位移操作:(只针对 int类型的数据有效,j

AC日记——神奇的幻方 洛谷 P2615(大模拟)

题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第一列,(K−1)所在行的上一行: 3.若(K−1)在第一行最后一列,则将K填在(K−1)

一个神奇的递推公式--转自2108

志远兄发现了一个神奇的递推公式, 某些递推的题目可以看作, 一个个上三角阵, 而问题的解为(1,1) 至 (n,n) 的路径个数, 废话不多说, 上题上代码 以下转自http://www.cnblogs.com/--ZHIYUAN/p/5971367.html 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9447    A