按位运算

C语言提供了6个位操作运算符,只能作用于整型操作数,即只作用于带符号或无符号的char、short、int、long。

&    按位与(AND)

!      按位或(OR)

^     按位异或(XOR)

<<   左移

>>   右移

~     按位求反(一元运算符)

按位与运算符&经常用于屏蔽某些二进制位,例如:

n = n & 01777

按位异或:当两个操作数的对应位不同时将该位设置为1,否则为0。

int x = 1;
int y = 2;
x & y; //0
x && y ;     //1
x     0000 0001
&
y     0000 0010
=     0000 0000

左移右移:移动的位数由右操作数指定(右操作数的值必须是非负值)。

x<<2把x的值左移2位,右边空出的2位补0。

x = 1;  0000 0001

x << 2 => 00 000100  => 4     <=>等价对左操作数乘以4

对unsigned类型的无符号值右移时,左边空出的部分补0;对signed类型的带符号值进行右移时,某些机器将对左边空出的部分用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分补0(即“逻辑移位”)。

一元运算符~用于求整数的二进制反码,即分别将操作数各二进制位上的1变0,0变1。

x = 1;

x = x & ~077=>1 & ~(1001101) => 1 & 0110010 => 0000001 & 0110010 => 0

以下函数暂时没搞懂

 #include <stdio.h>
unsigned getbits(unsigned x, int p, int n);
main(){
int x = ,y = , z = ;
int i = getbits(x,y,z);
printf("%d\n",i);
return ;
}
/**********返回x中从第p位开始的n位**********/
unsigned getbits(unsigned x, int p, int n){
return (x >> (p+-n)) & ~(~ << n);
}

赋值运算符和表达式

i = i +2;

i += 2;

expr1 op = expr2;   <=> (expr1) = expr1 op (expr2)

 #include <stdio.h>
int bitcount(unsigned x);
main(){
printf("%d\n",bitcount()); //c-free运行结果为18
return ;
}
/**********统计x中值为1的二进制位数**********/
int bitcount(unsigned x){
/*这里将x定义为unsigned类型为了保证将x右移时,无论程序在什么机器上运行,左边空出位都将补0,而不是符号位。 */
int b;
for(b=; x!=; x>>=){
if(x & ){
b++;
}
}
return b;
}

条件表达式
    if(a > b)
        z = a;
    else
        z = b;
    z = a > b ? a : b;

;    语句结束符号
{}    程序块

if-else
    if(表达式)
        语句

if(表达式)
        语句
    else
        语句
    
if(表达式)
    语句
else if(表达式)
    语句
else if(表达式)
    语句
else
    语句

为避免嵌套出错,尽量用{}括起来,也方便阅读。如下:
    if(){
        ….
  }else{
      ….
  }

 #include <stdio.h>
int binsearch(int x, int v[], int n);
main(){
int arr[] = {,,,,,,,,};
printf("%d\n",binsearch(,arr,)); //
return ;
} int binsearch(int x, int v[], int n){
int low,high,mid;
low = ;
high = n - ;
while(low <= high){
mid = (low + high) / ;
if(x < v[mid]) {
high = mid - ;
}else if(x > v[mid]){
low = mid + ;
}else{
return mid;
}
}
}

看到这些涉及到算法的代码,好多不太理解,加油自己!

重拾C,一天一点点_3的更多相关文章

  1. 重拾C,一天一点点_2

    类型转换一般来说,如果二元运算符的两个操作数具有不同的类型,较低的类型提升为较高类型,结果为较高类型.表达式由float类型的操作数不会自动转换为double类型.使用float类型主要是为了在使用较 ...

  2. 重拾C,一天一点点

    数据类型及长度 char        字符型,占用一个字节 int          整型,通常代表特定机器中整数的自然长度 short       16位 int         16位或32位 ...

  3. 重拾C

    重拾C,一天一点点_10 来博客园今天刚好两年了,两年前开始学编程. 忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多.这两天调试服务器,遇到不少麻烦. 刚出去溜达了一下,晚上 ...

  4. CSS魔法堂:重拾Border之——更广阔的遐想

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  5. CSS魔法堂:重拾Border之——不仅仅是圆角

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  6. CSS魔法堂:重拾Border之——图片作边框

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  7. CSS魔法堂:重拾Border之——解构Border

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  8. 重拾Blog

    上个月是我入职现在的公司三周年的月份,所以又续订了五年的合同,最近有一些思考,也不知道这个五年能否还会一直在这个公司工作. 一切随缘吧. 闲适有毒,忙碌的时光总是过的很快,自从加入这个公司以来,日常的 ...

  9. [linux]重拾linux

    起因 因为想重拾起linux,同时需要用docker起几个镜像,用来学习网络知识.本来想直接去阿里云上买,后来一想自己机器上,起一个linux是个不错的选择,毕竟不花钱! 还可以用来做本地测试,学习使 ...

随机推荐

  1. JAVA基础之正则表达式

    加 ^$  整个字符串满足要求 不加部分字符串满足要求即可通过 ======================================================== \:转义字符 \d:任 ...

  2. Dispatcher中Invoke与BeginInvoke

    [同步]Invoke Application.Current.Dispatcher.Invoke(AutoIncreaseNumber); [异步]BeginInvoke Application.Cu ...

  3. iOS 手机 邮箱 正则表达式

    //iOS代码//判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex ...

  4. Android 高级UI设计笔记15:HorizontalScrollView之 实现画廊式图片浏览器

    1. HorizontalScrollView 本来,画廊式的图片浏览器,使用Android中的Gallery就能轻松完成,但是Google说Gallery每次切换图片时都要新建视图,造成太多的资源浪 ...

  5. cocoapods 卸载,重装,高版本的使用

    今天清理下电脑,发现自己电脑上的cocoapods经常出现的一个问题就是一些经常用的第三方库cocoapods搜不到,比如SDWebImage,然后就鼓捣了一下 $pos list 命令发现M 以后的 ...

  6. 《Cortex-M0权威指南》之体系结构---存储器系统

    转载请注明来源:cuixiaolei的技术博客 Cortex-M0处理器为32位处理器,所以具有最大4G的寻址空间.在体系结构上,存储器空间被划分位一系列的区域,每个区域都有推荐的用途,以提高不同设备 ...

  7. 【转】google谷歌百度收录网站的技巧方法,如何让百度收录?

    下面由本人巴山给大家讲述一下搜索引擎收录网站的技巧虚拟主机 (1)在网站上线前,要有足够多的内容网站优化 确保网站在正式上线的时候,有100页以上的充实内容,而且这些内容尽可能的进行下编辑,优化,自己 ...

  8. Table of Contents - HttpClient

    HttpClient 4.3.5 Getting Started HttpClient 简单示例 Fundamentals Request Execution HTTP Request & H ...

  9. SourceTree基本操作

    下载地址:https://www.sourcetreeapp.com 1.从克隆远程仓库 2.填写git地址 3.克隆成功后会来点如下界面,点击testGitHub 4.scourceTree管理界面 ...

  10. 解决discuz与jquery不兼容问题——下拉列表不能用(Uncaught TypeError: Cannot set property 'position' of undefined)

    问题描述: 最近学着用discuz来模仿一个门户网站,里面要把导航条做出滑动效果,要用到jquery,将要用到jquery引用到header.htm中,如下图所示: 但是由于discuz采用php以及 ...