重拾C,一天一点点_3
按位运算
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的更多相关文章
- 重拾C,一天一点点_2
类型转换一般来说,如果二元运算符的两个操作数具有不同的类型,较低的类型提升为较高类型,结果为较高类型.表达式由float类型的操作数不会自动转换为double类型.使用float类型主要是为了在使用较 ...
- 重拾C,一天一点点
数据类型及长度 char 字符型,占用一个字节 int 整型,通常代表特定机器中整数的自然长度 short 16位 int 16位或32位 ...
- 重拾C
重拾C,一天一点点_10 来博客园今天刚好两年了,两年前开始学编程. 忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多.这两天调试服务器,遇到不少麻烦. 刚出去溜达了一下,晚上 ...
- CSS魔法堂:重拾Border之——更广阔的遐想
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——不仅仅是圆角
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——图片作边框
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——解构Border
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- 重拾Blog
上个月是我入职现在的公司三周年的月份,所以又续订了五年的合同,最近有一些思考,也不知道这个五年能否还会一直在这个公司工作. 一切随缘吧. 闲适有毒,忙碌的时光总是过的很快,自从加入这个公司以来,日常的 ...
- [linux]重拾linux
起因 因为想重拾起linux,同时需要用docker起几个镜像,用来学习网络知识.本来想直接去阿里云上买,后来一想自己机器上,起一个linux是个不错的选择,毕竟不花钱! 还可以用来做本地测试,学习使 ...
随机推荐
- solrj:org.apache.solr.common.util.NamedList.java
package org.apache.solr.common.util; import java.io.Serializable; import java.util.ArrayList; import ...
- django 用imagefiled访问图片
使用FileField和ImageField时,我们有几个步骤: 在settings.py中设置MEDIA_ROOT和MEDIA_URL MEDIA_ROOT:一个绝对路径,Django根据它知道文件 ...
- mina 字节数组编解码器的写法 II
I 里面的写法不够严谨,这也是我之前说它简陋的主要原因,下面来个更加严谨.完整一点儿的: ByteArrayEncoder.java package org.bruce.mina.cpp.codec; ...
- 精通C#(第6版)
<精通C#(第6版)> 基本信息 原书名:Pro C# 5.0 and the .NET 4.5 framework,sixth edition 作者: (美)Andrew Troelse ...
- js、jquery、动态添加option项
var selid = document.getElementById("sltid"); for(var i=0; i<10;i++){ //循环添加多个值 sid ...
- Linux与Windows文件传输实现
Linux与Windows文件传输实现 一.概述 在学习Linux服务器的时候,我们有时需要与Windows下的文件进行交互传输,这个时候我们需要如何实现呢?今天是我第一次在博客园上写文章,此时正值学 ...
- umbraco使用VS安装
新建——程序包管理器控制台——install - package umbracocms vs中的快捷键: ctrl+F5为调试: ctrl+shift+B生成解决方案: 打包前,App_data文件夹 ...
- asp.net实现通用水晶报表
此片博文是在你有一定水晶报表基础的前提下参阅的:如果对于水晶报表的基础知识比较薄弱建议先去了解下水晶报表: 因为项目需要,研究了下水晶报表.说实在,这个组件很强大,但是用起来也很麻烦.刚开始使用遇到了 ...
- 图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- apache Internal Server Error 的几个问题
Internal Server Error The server encountered an internal error or misconfiguration and was unable to ...