首页 > 试题

c语言判断奇偶数

更新时间:2022-12-08 01:35:50 阅读: 评论:0

理性看待网红作文800字-追赶的近义词


2022年12月8日发(作者:我与企业共成长征文)

stm32C语⾔怎么分割图像,位操作运算——以C语⾔的交互环

境来做代码演⽰

百度百科如下:程序中的所有数在计算机内存中都是以⼆进制的形式储存的。位运算就是直接对整数在内存中的⼆进制位进⾏操作位操作的优

势位运算是⼀种底层的运算,往往⽐我们普通的运算要快上许多许多

位运算是最⾼效⽽且占⽤内存最少的算法操作,执⾏效率⾮常⾼

位运算操作的是⼆进制数,会拥有⼀些⼆进制的特性,在实际问题可以⽅便运⽤

位运算只需较低的空间需求

位运算使⽤能使程序变得更加简洁和优美

位运算可以表⽰⼀些状态集合运算符号

下⾯的a和b都是整数类型,则:含义C语⾔

按位与a&b

按位或a|b

按位异或a^b

按位取反~a

左移a<

带符号右移a>>b

⽆符号右移优先级

C语⾔中位运算符之间,按优先级顺序排列为优先级符号

1~

2<>

3&

4^

5|

6&=、^=、|=、<<=、>>=概念简介以及技巧本⽂会以C语⾔的交互环境来做代码演⽰

常见的⼆进制位的变换操作

微信图⽚_(42.49KB,下载次数:1)

2020-6-1120:36上传

and运算&判断奇偶数

对于除0以外的任意数x,使⽤x&1==1作为逻辑判断即可if(x&1==1)

{

}

判断某个⼆进制位是否为1

⽐如第7位,0x40转到⼆进制是01000000,代表第7位是(n&0x40)

{

//TODO:添加你要处理的代码

}

字节读取(x>>0)&0x000000ff/*获取第0个字节*/

(x>>8)&0x000000ff/*获取第1个字节*/

(x>>16)&0x000000ff/*获取第2个字节*/

(x>>24)&0x000000ff/*获取第3个字节*/

判断⼀个数是不是22的指数boolisPowerOfTwo(intn){

if(n<=0)returnfal;

return(n&(n-1))==0;

}

取余//得到余数

intYu(intnum,intn)

{

inti=1<

returnnum&(i-1);

}

指定⼆进制位数截取

⽐如说16位⼆进制数A:1000,如果来你想获A的哪⼀位的值,就把数字B:0000的那⼀位设置

为1.

⽐如说我想获得A的第三位就把B的第三位数字设置为1,则B为0100,设置完之后再把A、B求与,其结果若为0,说

明A的第三位为0,其结果为1,说明A的第三位为1.

同理:若要获得A的第五位,就把B设置为0000,之后再求与。

通常在我们的程序中,数字B被称为掩码,其含义是专门⽤来测试某⼀位是否为0的数值。统计⼆进制中1的个数

利⽤x=x&(x-1),会将x⽤⼆进制表⽰时最右边的⼀个1变为0,因为x-1会将该位变为nt(intx)

{intsum=0;

while(x)

{sum++;

x=x&(x-1);

}

returnsum;

}

or操作⽣成组合编码,进⾏状态压缩

当把⼆进制当作集合使⽤时,可以⽤or操作来增加元素。合并编码在对字节码进⾏加密时,加密后的两段bit需要重新合并成⼀个字节,这

时就需要使⽤or操作。求⼀个数的⼆进制表达中0的个数intGrial(intx)

{

intcount=0;

while(x+1)

{

count++;

x|=(x+1);

}

returncount;

}

xor操作两个整数交换变量名voidswap(int&a,int&b){

a^=b;

b^=a;

a^=b;

}

判断两个数是否异号intx=-1,y=2;

boolf=((x^y)<0);//true

intx=3,y=2;

boolf=((x^y)<0);//fal

数据加密

将需要加密的内容看做A,密钥看做B,A^B=加密后的内容C。⽽解密时只需要将C^密钥B=原内容A。如果没有密钥,就不能解

密!#include

#include

#include

#defineKEY0x86

intmain()

{

charp_data[16]={"HelloWorld!"};

charEncrypt[16]={0},Decode[16]={0};

inti;

for(i=0;i

{

Encrypt=p_data^KEY;

}

for(i=0;i

{

Decode=Encrypt^KEY;

}

printf("Initialdate:%sn",p_data);

printf("Encryptdate:%sn",Encrypt);

printf("Decodedate:%sn",Decode);

return0;

}数字判重

利⽤了⼆进制数的性质:x^y^y=x。我们可见,当同⼀个数累计进⾏两次xor操作,相当于⾃⾏抵销了,剩下的就是不重复的数找出没有重

复的数intfind(int[]arr){

inttmp=arr[0];

for(inti=1;i<;i++){

tmp=tmp^arr;

}

returntmp;

}not操作交换符号intreversal(inta){

return~a+1;

}

取绝对值(效率⾼)n>>31取得n的符号

若n为正数,n>>31等于0

若n为负数,n>>31等于-1

若n为正数n^0=0,数不变

若n为负数,有n^-1需要计算n和-1的补码,然后进⾏异或运算,结果n变符号并且为n的绝对值减1,再减去-1就是绝对值intabs(intn)

{

return(n^(n>>31))-(n>>31);

}

也可以这样使⽤intabs(intn)

{

inti=n>>31;

returni==0?n:(~n+1);

}

从低位到⾼位.将n的第m位置1

将1左移m-1位找到第m位,得到000...1...000,n在和这个数做或运算inttBitToOne(intn,intm)

{

returnn|(1<<(m-1));

}

同理从低位到⾼位,将n的第m位置0,代码如下inttBitToZero(intn,intm)

{

returnn&~(1<<(m-1));

}

shl操作&shr操作求2的N次⽅1<

⾼低位交换unsignedshorta=34520;

a=(a>>8)|(a<<8);

进⾏⼆进制逆序unsignedshorta=34520;

a=((a&0xAAAA)>>1)|((a&0x5555)<<1);

a=((a&0xCCCC)>>2)|((a&0x3333)<<2);

a=((a&0xF0F0)>>4)|((a&0x0F0F)<<4);

a=((a&0xFF00)>>8)|((a&0x00FF)<<8);

获得int型最⼤最⼩值intgetMaxInt()

{

return(1<<31)-1;//2147483647,由于优先级关系,括号不可省略

}

intgetMinInt()

{

return1<<31;//-2147483648

}

m的n次⽅//⾃⼰重写的pow()⽅法

intpow(intm,intn){

intsum=1;

while(n!=0){

if(n&1==1){

sum*=m;

}

m*=m;

n=n>>1;

}

returnsum;

}

找出不⼤于N的最⼤的2的幂指数intfindN(intn){

n|=n>>1;

n|=n>>2;

n|=n>>4;

n|=n>>8//整型⼀般是32位,上⾯我是假设8位。

return(n+1)>>1;

}

⼆分查找32位整数的前导0个数intnlz(unsignedx)

{

intn;

if(x==0)return(32);

n=1;

if((x>>16)==0){n=n+16;x=x<<16;}

if((x>>24)==0){n=n+8;x=x<<8;}

if((x>>28)==0){n=n+4;x=x<<4;}

if((x>>30)==0){n=n+2;x=x<<2;}

n=n-(x>>31);

returnn;

}

位图的操作

将x的第n位置1,可以通过x|=(x<

将x的第n位清0,可以通过x&=~(1<

取出x的第n位的值,可以通过(x>>n)&1来实现get_bit(charx,intn);

如下:#defineclr_bit(x,n)((x)&=~(1<<(n)))

#definet_bit(x,n)((x)|=(1<<(n)))

#defineget_bit(x,n)(((x)>>(n))&1)

综合应⽤

以下仅列出,感兴趣可以参考下⾯链接.

关于操作计数⽅法

计算整数的符号

检测两个整数是否具有相反的符号

计算⽆分⽀的整数绝对值(abs)

计算两个整数的最⼩值(最⼩值)或最⼤值(最⼤值),⽽⽆需分⽀

确定整数是否为2的幂

标志延伸从恒定位宽扩展的符号

从可变位宽扩展的符号

通过3个操作从可变位宽扩展符号有条件地设置或清除位⽽不分⽀

有条件地否定⼀个值⽽不分⽀

根据掩码合并两个值中的位

计数位设置计数位设置,幼稚的⽅式

计算由查找表设置的位

数位集,BrianKernighan的⽅式

使⽤64位指令对14、24或32位字中设置的位进⾏计数

并⾏设置计数位

从最⾼有效位到给定位置的计数位的设置(等级)

从给定的计数(等级)中选择位位置(从最⾼有效位开始)

计算奇偶校验(如果设置了奇数位数,则为1,否则为0)天真地计算单词的奇偶性

通过查找表计算奇偶校验

使⽤64位乘法和模数除法计算字节的奇偶校验

⽤乘法计算单词的奇偶校验

并⾏计算奇偶校验

交换价值⽤减法和加法交换值

⽤XOR交换值

⽤XOR交换单个位

反转位序列反转位是显⽽易见的⽅式

逐字查找表中的位反转

通过3个操作(64位乘法和模数除法)反转字节中的位

通过4个操作反转字节中的位(64位乘法,⽆除法)

通过7个操作反转字节中的位(⽆64位,仅32位)

与5*lg(N)个运算并⾏地反转N位数量

模数除法(⼜名计算余数)在不进⾏除法运算的情况下,将模数除以1<

在不进⾏除法运算的情况下以(1<

不进⾏除法运算就并⾏计算(1<

查找整数的整数对数2(⼜称最⾼位集的位置)使⽤O(N)运算找到MSBN设置为整数的对数2(显⽽易见的⽅法)

查找具有64位IEEE浮点数的整数的整数对数2

使⽤查找表找到整数的对数2

在O(lg(N))运算中找到N位整数的对数2

使⽤乘法和查找在O(lg(N))操作中找到N位整数的对数2

查找整数的对数以10为底的整数

查找整数的整数对数10

查找32位IEEE浮点数的整数对数基数2

查找32位IEEE浮点的pow(2,r)根的整数对数基数2(对于⽆符号整数r)

计算连续的尾随零位(或查找位索引)线性计算右边的连续零位(后缀)

并⾏计算右侧连续的零位(后缀)

通过⼆进制搜索计算右边连续的零位(跟踪)

通过强制转换为浮点数来计算右侧连续的零位(跟踪)

⽤模数除法和查找计算右边连续的零位(跟踪)

⽤乘法和查找计数右边连续的零位(后跟)

通过浮法舍⼊到2的下⼀个最⾼幂

向上舍⼊到2的下⼀个最⾼幂

交织位(也称为计算莫顿数)交错位的明显⽅式

通过表查找交织位

带64位乘法的交织位

通过⼆进制幻数交错位

测试单词中的字节范围(并计算出现的次数)确定单词是否为零字节

确定⼀个单词的字节数是否等于n

确定⼀个单词的字节数是否⼩于n

确定单词的字节数是否⼤于n

确定单词是否在m和n之间有⼀个字节

按词典顺序计算下⼀位排列

本文发布于:2022-12-08 01:35:50,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/88/63051.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:设计总监英文
下一篇:孝亲名言
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图