c语言setbits,invert

k&r习题2-6,setbits(x,p,n,y),将x中从第p位开始的n个二进制位设置为y中最右边n位的值,x的其余各位保持不变。

#include<stdio.h>

unsigned setbits(unsigned x, int p, int n,unsigned y)
{
    int mask;
    int pos=p+1-n;
    mask=~(~0<<n) << pos ;
    x=x & ~mask;
    y=y<<pos & mask;
    x=x|y;

    return x;
}

main()
{
    int x=012;
    int y=077;
    printf("%o\n",setbits(x,4,3,y));
}

~0的所有位都为1,通过对其移位补0,建立屏蔽码,在位操作中很常用

2-7,invert(x,p,n)

#include<stdio.h>
unsigned invert(unsigned x, int p, int n)
{
    return x^(~(~0<<n) << (p+1-n));
}

int main()
{
    unsigned a=034;
    printf("%o\n",invert(a,4,3));
}

与1按位异或,原位反转;与0异或,原位不变

时间: 2024-10-01 06:14:54

c语言setbits,invert的相关文章

C语言位操作

最近在重新学习C语言,使用的书为Brian W.Kernignan 和 Dennis M.Ritchie的<C程序设计语言> .今晚读到了位操作,并写了一些简单的测试程序. C语言提供了6个位操作运算符.这些运算符只能作用于整型操作数,即只能作用于带着有符号或无符号的char.short.int与long类型. 这六种位操作运算符为: & 按位与 | 按位或 ^ 按位抑或 << 左移 >> 右移 ~ 按位求反 位操作常用于一些开关性质的操作.例如: x = x

R语言之正则表达式

在我看来,正则表达式的主要用途有两种:①查找特定的信息②查找并编辑特定的信息,也就是我们经常用的替换..比如我们要在Word,记事本等里面使用快捷键Ctrl+F,进行查找一个特定的字符,或者替换一个字符,这就使用了正则表达式. 正则表达式的功能非常强大,尤其是在文本数据进行处理中显得更加突出.R中的grep.grepl.sub.gsub.regexpr.gregexpr等函数都使用正则表达式的规则进行匹配.这几个函数原型如下: grep(pattern, x, ignore.case = FAL

R语言学习笔记:字符串处理

想在R语言中生成一个图形文件的文件名,前缀是fitbit,后面跟上月份,再加上".jpg",先不百度,试了试其它语言的类似语法,没一个可行的: C#中:"fitbit" + month + ".jpg" VB:"fitbit" & month & ".jpg" Haskell:"fitbit" ++ month ++ ".jpg" 还想到concat之

【07_226】Invert Binary Tree

Invert Binary Tree Total Accepted: 54994 Total Submissions: 130742 Difficulty: Easy Invert a binary tree. 4 / 2 7 / \ / 1 3 6 9 to 4 / 7 2 / \ / 9 6 3 1 Trivia:This problem was inspired by this original tweet by Max Howell: Google: 90% of our enginee

(转载)虚幻引擎3--UnrealScript语言参考

档概要: UnrealScript 介绍和简要参考.最初作者是Tim Sweeney (EpicGames) 内容 UnrealScript语言参考 介绍 快速链接 本文档的目的 UnrealScript的设计目标 虚幻引擎3中UnrealScript的新功能 代码结构示例 Unreal虚拟机 对象层次 类 变量 变量类型 内置类型 集合数据类型 Unreal类型 变量修饰符 可编辑性 数组 Structs 修饰符 枚举 常量 Object和actor引用变量 类引用变量 表达式 赋值 在类之间

leetcode:Invert Binary Tree

Invert a binary tree. 4 / 2 7 / \ / 1 3 6 9 to 4 / 7 2 / \ / 9 6 3 1即反转二叉树,代码如下: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * };

C语言必须要记住的18个经典程序

1./*判断101-200之间有多少个素数,并输出所有素数及素数的个数. 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数.*/ #include "math.h" main() { intm,i,k,h=0,leap=1; printf("\n"); for(m=101;m<=200;m++) {k=sqrt(m+1); for(i=2;i<=k;i++) IF(m%i==0) {leap

使用R语言计算均值,方差等

R语言对于数值计算很方便,最近用到了计算方差,标准差的功能,特记录. 数据准备 height <- c(6.00, 5.92, 5.58, 5.92) 1 计算均值 mean(height) [1] 5.855 2 计算中位数 median(height) [1] 5.92 3 计算标准差 sd(height) [1] 0.1871719 4 计算方差 var(height) [1] 0.03503333 5 计算两个变量之间的相关系数 cor(height,log(height)) [1] 0

GCC在C语言中内嵌汇编 asm __volatile__ 【转】

转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编 例: __asm__ __volatile__("hlt"); "__asm__"表示后面的