重拾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是个不错的选择,毕竟不花钱! 还可以用来做本地测试,学习使 ...
随机推荐
- JAVA WEB 作用域之间的区别
JAVA WEB 作用域 1.page属性范围(pageContext) a.在一个页面设置的属性,跳转到其他页面就无法访问了(包括重定向和). 示例:pageScopeDemo01.jsp < ...
- 将字符转换为unicode码
将字符转换为unicode码: /** * unicode转义字符 * @param ch * @param out */ public static void unicodeEscape(int c ...
- Android(java)学习笔记68:同步代码块 和 同步方法 的应用
1. 同步代码块 和 同步方法 代码示例: (1)目标类,如下: package cn.himi.text; public class SellTicket implements Runnable { ...
- django 用imagefiled访问图片
使用FileField和ImageField时,我们有几个步骤: 在settings.py中设置MEDIA_ROOT和MEDIA_URL MEDIA_ROOT:一个绝对路径,Django根据它知道文件 ...
- 解决ThinkPHP开启APP_DEBUG=>false时报错的问题
最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现 “页面调试错误,无法找开页面,请重试”的错误,我就郁闷啦,明明本地设置define('APP_D ...
- 程序编码(机器级代码+汇编代码+C代码+反汇编)
[-1]相关声明 本文总结于csapp: 了解详情,或有兴趣,建议看原版书籍: [0]程序编码 GCC调用了一系列程序,将源代码转化成可执行代码的流程如下: (1)C预处理器扩展源代码,插入所有用#i ...
- ionic使用sass
sass 是一个css的预编译器,常见的预编译器有less,sass,stylus等,目前sass似乎更受青睐一些,bootstrap的最新版本以及ionic 都是用sass来构建页面效果的.这篇文章 ...
- log4net保存到数据库系列三、代码中xml配置log4net
园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...
- jQuery无缝循环开源多元素动画轮播jquery.slides插件
详细内容请点击 初始化插件: 一款基于jQuery无缝轮播图插件,支持图内元素动画,可以自定义动画类型$(".slideInner").slide({slideContainer: ...
- asp动态生成google的sitemap地图的代码
本来使用那些网站生成google网站地图,时间久了,感觉太麻烦了:先打开他们的网站,输入我的网址,然后点击生成,等待一段时间后,下载生成后的文件,再将它通过ftp上传到空间上了.实在太麻烦了,还不如自 ...