c笔记——位运算
来源:互联网 发布:英语翻译 知乎 编辑:程序博客网 时间:2024/06/06 10:00
用c编写低级程序,位运算非常重要
#include<stdio.h>#include<stdlib.h>int main(int argc,char** argv){unsigned int i=0x78;//0111 1000//设置i的第2位1i |= 1<<2;printf("%x\n",i);//0x7c//将i的第六位清零i &= ~(1<<6);printf("%x\n",i);//0x3c//测试某一位的状态if(i & 1<<5);//假设用一个unsigned char型表示8种颜色typedef enum{COLOR_BLACK=1,COLOR_RED=2,COLOR_BLUE=4,COLOR_MAGENTA=8,COLOR_GREEN=16,COLOR_CYAN=32,COLOR_YELLOW=64,COLOR_WHITE=128}Color;unsigned char color=0x56;if(color & COLOR_GREEN)printf("Have COLOR_GREEN\n");color &= COLOR_YELLOW;//设置黄色color |= ~(COLOR_YELLOW);//清除黄色if(color & (COLOR_GREEN | COLOR_MAGENTA));//测试两种颜色//设置连续的位(位域),比如要设置i的5-7位为011i=(i & ~(7<<5)) | (3<<5);//先清零,再赋值printf("%x\n",i);//获取位域,比如获取i的3-5位,先右移到最低位,再取unsigned int j=(i>>3) & 0x07; printf("%x\n",j);//日期结构(结构位域)struct Date{unsigned int day:5,month:4,year:7;};Date date;date.year=9;date.month=9;date.day=28;printf("%d/%d/%d\n",date.day,date.month,date.year+1980);//我们知道 intel 80X86 包含16位寄存器 AX,BX,CX,DX//AX又可以分为两个8位寄存器 AH,AL 高八位和低八位//假设需要对16位寄存器和8位寄存器都访问,同时保留他们之间的关系union Regs{struct{unsigned int ax:16,bx:16,cx:16,dx:16;}X16;struct{unsigned char al,ah,bl,bh,cl,ch,dl,dh;}X8;};Regs regs;regs.X8.al=0x34;regs.X8.ah=0x12;printf("AX:%x\n",regs.X16.ax);}
下面是用异或 ^ 加密的简单原理
A^B=result;
result^B=A^B^B=A;
B是秘钥,将密文再与秘钥^便得到明文
#include<ctype.h>#include<stdio.h>#define KEY '&'void jiami(char *src,char key){char *p=src;while(*p++!='\0'){if(iscntrl(*p^key)|| iscntrl(*p));else*p=*p^key;}}int main(){char buf[1024];while(fgets(buf,1024,stdin)){printf("加密前:");printf("%s\n",buf);printf("加密后:");jiami(buf,KEY);printf("%s\n",buf);printf("再次加密,即解密:");jiami(buf,KEY);printf("%s\n",buf);}return 0;}
0 0
- c笔记——位运算
- 《The C Programming Language》学习笔记——位运算
- C/C++学习笔记——位运算
- C———位运算总结
- C语言——位运算
- C语言—位运算、char、数组
- [算法笔记]——位运算平方根
- 《c语言从入门到精通》看书笔记——第12章 位运算
- C语言中的位运算&结构体浅析 — <编程之美>1.2学习笔记
- C语言学习笔记11--位运算
- 我的c语言笔记---位运算
- c 语言笔记.函数和位运算
- C语言学习笔记 位运算
- 位运算符—&
- 位运算符—|
- 黑马程序员——C语言学习笔记03 变量在内存中存储的细节、位运算
- C语言面试题——位运算
- C语言的本质(6)——位运算
- Nginx内存管理及数据结构浅析–共享内存的实现
- android APN code关键点
- PHP 给图片加边框
- 黑马程序员——集合框架
- php读取csv文件类
- c笔记——位运算
- Linux命令之fuser详解
- 收缩表段(shrink space)
- python核心编程--第九章 9.11 练习
- 经纬财富:洛阳现货白银交易时间现货白银交易手续费
- [JAVA入门之错误总结-2]项目创建-各种项目类型之间的区别
- leetcode——Search for a Range 排序数组中寻找目标下标范围(AC)
- 机制和策略
- mongodb 启动脚本