c语言lesson02
来源:互联网 发布:网络电视播放器排行 编辑:程序博客网 时间:2024/05/31 19:41
进制转换:
十进制转N进制.
比如:十进制转二进制,十进制转十六进制.
秘诀:连除倒取余.
N进制转十进制.
比如:二进制转十进制,十六进制转十进制.
秘诀:当前位上的数乘以基数的位数减一次方.
十进制转二进制:整数部分连乘取余,小数部分连乘取整
运算符和表达式:
1.算术运算符:+ - * / % ++ --
2.关系运算符:> >= < <= != ==
3.逻辑运算符:与(&&) 或(||) 非(!)
4.位运算符:
参与运算的量按二进制位进行计算.
按位与&、按位或|、按位非~、按位异或^、左移<<、右移>>
<<左移一位相当于乘2,>>右移一位相当于除2
一字节(Byte)表示8个二进制位(bit)
一个字节是两个16进制位
算术右移与逻辑右移:
比如一个有符号位的8位二进制数11001101,逻辑右移就不管符号位,如果右移一位就变成01100110.算术右移要管符号位,右移一位变成11100110.
1)逻辑右移和算术右移
逻辑右移,移走的位填充为0;算术右移,移走的位填充与符号位有关,例如如果为负数,则移走的位填充为1.
2)unsigned int 和 int
c语言的标准指出,无符号数执行的所有移位操作都是逻辑的,而对于有符号数,采用哪种方式取决于编译器.算术左移和逻辑左移是相同的,而算术右移和逻辑右移,取决于符号位.
看有无符号
unsigned 10100110=>01010011
singned 10100110=>11010011
5.赋值运算符
用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)
6.条件运算符:这是一个三目运算符,用于条件求值,一般形式:
表达式1 ? 表达式2 : 表达式3
例如:x>6 ? x+2 : x-2
max=(a>b) ? a : b ;
注意:00000101(5)取反:11111010因为数在计算机里是用补码形式存放的,所以要把11111010看做一段补码,现在把补码转化为原码,第一位是符号,不用变,先减1变反码:11111001,再取反变原码10000110,即-6
int main(int argc, const char * argv[])
{
int number1 =3;
int number2 =4;
int result1 =number1 & number2;//整型按位与
printf("按位与的结果为:%d\n",result1);
int result2 =number1|number2;//整型按位或
printf("按位或的结果为:%d\n",result2);
int result3=~number2;//整型按位非(取反)
printf("按位非的结果为:%d\n",result3);
int result4=number1^number2;//整型相异或
printf("异或的结果为%d\n",result4);
//利用位运算交换连个变量的值
number1=number1^number2;
number2=number2^number1;
number1=number1^number2;
printf("number1=%d,number2=%d\n",number1,number2);
short result5=number1<<10;
printf("118左移两位的结果为:%d\n",result5);
short result6=number1>>2;
printf("3右移两位的结果为:%d\n",result6);
return 0;
}
作业:
1、输入一个字节内的数(0~255),然后将该数转换为二进制数,然后将高四位和低四位互换。
2.输入一个字节的整数(0~255),然后将该数转换为二进制数,然后将奇数位和偶数位互换。
3.输入一个字节内的数(0~255)和移动位数。输出移位结果(要求循环移位)。提示:系统自带的移位都是非循环的。
int main(int argc, const char * argv[])
{
/*
//1.
int n,a1,a2,a3,a4,a5,a6,a7,a8,c,w;
printf("1.请输出一个整数(0~255):");
scanf("%d",&n);
a8=n%2;
a7=n/2%2;
a6=n/2/2%2;
a5=n/2/2/2%2;
a4=n/2/2/2/2%2;
a3=n/2/2/2/2/2%2;
a2=n/2/2/2/2/2/2%2;
a1=n/2/2/2/2/2/2/2%2;
printf("该数转换为二进制为:%d%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7,a8);
int c1=n&15;
int c2=c1<<4;
int c3=n>>4;
c=c2|c3;
a8=c%2;
a7=c/2%2;
a6=c/2/2%2;
a5=c/2/2/2%2;
a4=c/2/2/2/2%2;
a3=c/2/2/2/2/2%2;
a2=c/2/2/2/2/2/2%2;
a1=c/2/2/2/2/2/2/2%2;
printf("将高四位和低四位互换后为:%d%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7,a8);
//2.
printf("2.请输出一个整数(0~255):");
scanf("%d",&n);
a8=n%2;
a7=n/2%2;
a6=n/2/2%2;
a5=n/2/2/2%2;
a4=n/2/2/2/2%2;
a3=n/2/2/2/2/2%2;
a2=n/2/2/2/2/2/2%2;
a1=n/2/2/2/2/2/2/2%2;
printf("该数转换为二进制为:%d%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7,a8);
w=((n&170)>>1)|((n&85)<<1);
a8=w%2;
a7=w/2%2;
a6=w/2/2%2;
a5=w/2/2/2%2;
a4=w/2/2/2/2%2;
a3=w/2/2/2/2/2%2;
a2=w/2/2/2/2/2/2%2;
a1=w/2/2/2/2/2/2/2%2;
printf("奇数和偶数互换后为:%d%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7,a8);
//3.
unsigned char a,b;
int i , move, x, y;
printf("请输入一个整数和所移动的个数:\n");
scanf("%d%d",&i,&move);
a=(char)i;
x=a>>move;
y=a<<(8-move);
b=x|y;
printf("%u\n",b);
*/
int number1;
printf("输入一个0~255之内的整数:");
scanf("%d",&number1);
//通过强制类型转换将整型转换成无符号字符型,表示一个字节内的数,并且是8位二进制位
unsigned char num =(unsignedchar)number1;
/* 1. unsigned char left=num<<4;
unsigned char right=num>>4;
unsigned char result=left|right;
*/
/* 2. unsigned char left=num<<1;
unsigned char right=num>>1;
unsigned char result=(left&170)|(right&85);
*/
//3.
printf("请输入一个循环次数:");
int n;
scanf("%d",&n);
unsigned char right=num>>n;
unsigned char left=num<<(8-n);
unsigned char result=left|right;
printf("result=%d\n",result);
return 0;
}
- c语言lesson02
- C++lesson02
- javase lesson02
- Lesson02:HTML 5 视频
- Lesson02 二进制运算
- Java Script-Lesson02
- NEHE的OpenGL代码Lesson02
- NeHe教程Qt实现——lesson02
- C语言
- C语言
- C语言
- C语言
- C语言
- c语言
- C语言
- C语言
- C语言
- C语言
- 提高系统性能——对SQL语句优化的思考
- NDK官方开发指南翻译之 Android.mk
- 如何0后言文塞,是把侔
- net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
- 解决jni项目编译生成so时报错"argument list too long"
- c语言lesson02
- Linux网络编程必看书籍推荐
- Web Service--java代码实现客户端编写---[小结]
- 使用Run-Time c 函数open的注意事项
- TCP/IP、Http、Socket的区别
- android 矩形碰撞
- shell变量的替换
- 盘点被App Store拒绝的79个原因
- Sun JDK自带JVM内存使用分析工具HProf