按位运算

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. Spring mvc编码配置

    Spring3 MVC也带有自己的编码: jar包:org.springframework.web-3.0.0.RELEASE.jar 只需要在web.xml配置即可: <!-- spring ...

  2. 点击UITableviewCell展开收缩

    #import "ViewController.h" #import "ZSDTestCell.h" @interface ViewController ()& ...

  3. 杂乱无章之Oracle(二)

    六.IMPDP用法 1.导入表 impdp hsiufo/hsiufo directory=dump_dir dumpfile=full.dmp tables=scott.emp remap_sche ...

  4. 【阿里云产品公测】OpenSearch初探

    作者:阿里云用户 yqzzzz 这两天在折腾站内搜索,下午照例上阿里云网站看看ECS,OSS情况,恰巧看到免费公测的活动,咦,OpenSearch,看起来这不就是我要找的东西么!  1分钟时间填完申请 ...

  5. 【Mood-20】滴滤咖啡做法 IT工程师加班必备 更健康的coffee 项目经理加班密鉴

    Drip Coffee

  6. 如何鉴别程序抄袭c语言程序代写

    如何鉴别程序抄袭:如何鉴别一份程序代码是抄袭另一份程序.输入:两个C语言源程序文件 输出:抄袭了多少?给出最相似的片段,判断是谁抄袭了谁? 提示:首先进行统一规范化排版,去掉无谓的空格.空行,然后比对 ...

  7. javaweb学习总结二十四(servlet经常用到的对象)

    一:ServletConfig对象 1:用来封装数据初始化参数,在服务器web.xml配置文件中可以使用<init-param>标签配置初始化参数. 2:实例演示 web.xml文件中配置 ...

  8. freeCodeCamp:Convert HTML Entities

    将字符串中的字符 &.<.>." (双引号), 以及 '(单引号)转换为它们对应的 HTML 实体. 现在这个表里找出要转化的符号https://dev.w3.org/h ...

  9. Java计算机网络

    计算机网络: 分布在不同的地域的计算机通过外接设备(路由器),实现共享和数据传输网络编程:网络编程主要是用来解决计算机和计算机之间的数据传输网络编程:不需要基于HTML就可以达到数据之间的传输,比如Q ...

  10. 三.CSS层叠机制

    概述 层叠就是对样式的层叠.是某种样式在样式表中逐层叠加的过程.让浏览器对某个标签特定属性值的多个来源,最终确定使用那个值.层叠是整个CSS的核心机制. HTML文档样式的来源 1.浏览器默认样式,每 ...