c基础【一】利用位运算实现数字反转

#include <stdio.h>
#include <stdlib.h>
int main()
{

  //通过位运算实现数字的反转(操作的对象必须是整数)

  unsigned  int original =0x123;
  unsigned  int result  =0;
  unsigned  int mask =0xF;   //掩码

  result |=original&mask;

  original>>=4;
  result<<=4;
  result |=original&mask;

  original>>=4;
  result<<=4;
  result|=original & mask;

  printf("%X\n",result);

  return 0;
}

时间: 2024-10-10 05:10:07

c基础【一】利用位运算实现数字反转的相关文章

【C】辗转相除法求两个数的最大公约数,利用位运算交换两个数无须中间变量

辗转相除法,又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法.它是已知最古老的算法, 其可追溯至3000年前.这种算法,在中国则可以追溯至东汉出现的<九章算术>.设两数为a.b(a>b),求a和b最大公约数(a,b)的步骤如下:用a除以b,得a÷b=q......r1(0≤r1).若r1=0,则(a,b)=b:若r1≠0,则再用b除以r1,得b÷r1=q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r1除r2

利用位运算进行权限管理

原理 在Linux文件系统中,一个用户对文件或目录所拥有的权限分为三种:”可读”.”可写”和”可执行”,分别用 1 .2 和 4 来表示,它们之间可以任意组合:有“可读”.“可写”权限就用 3 来表示(1 + 2 = 3):有”可读“.”可执行“权限就用5来表示(1 + 4 = 5),三种权限全部拥有就用 7 表示(1 + 2 + 4 = 7). 实际上,这种运算是基于二进制的. 假设可执行.可写.可读三种权限分别对应三个状态位,如果用户具有某种权限,那么将对应的状态位标识为“1”,反之则标识为

【Java基础】Java位运算

/* * JAVA位运算: 与(&).非(~).或(|).异或(^).左移(<<).右移(>>) *+-----------------------------------------------------------------------------------+ *| & | 当两边操作数的位同时为1时,结果为1,否则为0 如1 1 0 0 & 1 0 1 0 = 1 0 0 0 | *+-------------------------------

【基础算法】位运算-基本运算

上一篇中我们分析了位的定义,这一篇中我们分析一下位的基本运算 1. 移动 左移n位:乘以2的n次方 右移n位:除以2的n次方 (~0)左移n位:在1后面加上n个0 (注:~0不等于1,等于11-11) x&(~0<<n):将最右边的n位清零 正数左移右边补0 正数右移左边补0 负数左移右边补1 负数右移左边补1 移动的作用总结:乘2,除2,右n位清零 2. 异或 x^0=x x^x=0 x^1=~x x^~x=1 异或的作用总结:取数,清零,取非,清1 3. 且运算 x&0=0

常用技巧(一):利用位运算去掉贴图空白部分

一.问题描述 在游戏开发的时候,特别是在2D游戏开发,我们经常会遇到这样一个问题,我们选用的是一张jpg/bmp图片,它不像png那样拥有透明的像素点.所以当我们把图片放到我们的屏幕的时候可能会出现如下问题: 我们的图片,我想把他贴到我们的背景上面 预期效果: 实际效果: 二.解决办法 1.首先我们先对图片素材做一点点的修改 我们需要两张图片:一张为原图,一张为屏蔽图 原图,注意这里我们不需要的部分必须为黑色 屏蔽图,只有黑白两色,需要的部分为黑色,不需要的部分为白色 2.将屏蔽图与背景图作位A

ACM道路之一:基础算法(位运算)

lowbit(x) : 返回x的最后一位1 lowbit(100010)   = 10 lowbit(11011000) = 1000 lowbit(x) = x&(-x)   = x & (~x+1)  : -x  x的补码 = x 取反+1 给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数. 输入格式 第一行包含整数n. 第二行包含n个整数,表示整个数列. 输出格式 共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数. 数据范围 1

利用位运算简单实现加密运算

1 public static void main(String[] args){ 2 Scanner scanner = new Scanner(System.in); 3 System.out.println("please enter something:"); 4 String str = scanner.nextLine(); 5 char[] array = str.toCharArray(); //获取字符数组 6 for (int i = 0; i<array.l

数字位运算操作与算法简单示例

我们对于位运算可能既陌生又熟悉.知道其运算方法运算过程,但不能运用好它. 首先,我们还是回顾一下Java中位运算都包含那些操作: 一.与运算(&) 运算法则:将二进制数进行按位与运算.0&0=0:0&1=0:1&1=1 : 如:0011 & 0010 = 0010: 二.或运算(|) 运算法则:将二进制数进行按位或运算.0|0 =0:1|0 = 1;  1|1=1 如:0011 & 0010 = 0011: 三.异或运算(^) 运算法则:将二进制数进行按位异

Java I/O : Bit Operation 位运算

Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter    :BYSocket 泥瓦匠喜欢Java,文章总是扯扯Java. I/O 基础,就是二进制,也就是Bit. 一.Bit与二进制 什么是Bit(位)呢?位是CPU处理或者数据存储最小的单元.类似于很小很小的开关,一开一关,表示为1或者0.所以,这就是计算机处理任何数据的"细胞",要谨记.