05,标准C

来源:互联网 发布:扮猪吃老虎 知乎 编辑:程序博客网 时间:2024/05/04 14:36
/*
 达内学习 标准C  day05 2013-9-5


预习
1,其他位运算符
2,三目操作符
3,类型转换
4,分支结构  (if ,switch..case)
5,循环(for)
 */
回顾:
1,数据类型
2,二进制和八进制转换
3,八进制和十六进制
作业:
1,十进制转二进制
2,时间


使用二进制表示负数时不可以使用-号
一个字节中存入9个数位,最高位截断,剩下低八位
1 0000 0000 = 0000 0000 =0
1 0000 0000 - 0011 1010
=1111 1111 + 1 - 0011 1010
=1111 1111 - 0011 1010 + 1
负数补码是取反加1


负数二进制的计算方法
1,求出相反数(对应非负数),的二进制
2,对这个二进制数做按位取反加一
使用上述方法计算出来的结果就是补码,可以直接存储在计算机里


0000 0000 的补码还是0000 0000 
1000 0000 规定是数据类型中的最小数 如-128
任何数据类型中有两个特殊的数字,分别是 全零 和 只有首位是1 (自己相加得0),后一个数用来表示这个数据类型中的最小数 如:-128


根据一个二进制补码计算相反数的二进制补码也可以取反加1,互为补码


所有的有符号数据的最高位叫做符号位 符号位为0表示是非负数,符号为1表示为负数
无符号数据是没有符号位的,符号位不能等同于正负号


整数之间的赋值要保持二进制不变


有符号数据扩充的时候在前面所有位都补充符号位,无符号数据前面扩充0   char ch=128   int a=ch     ->ch=-128 a=128


C语言中可以是使用(+-*/%)
,也可以当操作符 可以把两个无关的表达式连接在一起  合并后的结果是最后一个表达式的结果 
,操作符号的优先级非常低
printf("计算结果是%d\n",(1+2,3+4));  //输出为3+4=7


=赋值操作符可以用来改变变量的内容
赋值操作符的左边必须是左值(变量),右边必须能当数字使用
赋值操作符的优先级也很低,但是比,的优先级高 
一条语句中可以包含多个赋值操作符  先运算右边的   从右到左
赋值操作符的优先级也很低,但是比,的优先级高


双目运算符需要两个数字联合使用
很多双目操作符可以和复制操作符合并形成复合赋值操作符(+= -+ *= /=)
复合赋值操作符也是双目操作符
复合赋值操作符也要求左边是变量,右边是可以但数字使用的
 num += 6;等于num = num +6;
复合赋值操作符中但双目操作符优先级和赋值操符号一样低
自增(++)和自减(--)也是C语言中可以使用的操作符,用于对一个变量进行加一或者减一操作
他们都是单目操作符   他们只能对变量进行操作也是C语言中可以使用的操作符,用于对一个变量进行加一或者减一操作
他们都是单目操作符   他们只能对变量进行操作
分成前操作和后操作两种
前操作的优先级非常高  后操作的优先级最低


不要在一条语句中对一个变量进行多次自增或自减
num1 = num++ + ++num;    //先做++num =6 后做加法+ 然后赋值  最后num++
num=num2++ + ++num2;  //num2是全局变量,先算++num2,后算加法 此时前面的num2里面还是5,所有num=5+6,然后num2++ =5   【编译器特异性】


布尔值 包括真(true)或假(false)
bool类型用来描述布尔值,为了使用布尔需要把stdbool.h文件合并进来
bool类型并不是C语言官方提供认可的类型
布尔值在计算机内部仍然用整数表示,真用1表示,假用0表示 
C语言中所有整数都可以当布尔值来用  0当成false  所有其他整数值当成真


逻辑操作符用来编写逻辑表达式
逻辑表达式的计算结果必须是布尔值 
双目逻辑操作符包括== != != < > <= >=
单目逻辑操作服!对一个布尔值求反


逻辑操作符比算术操作符的优先级低    //计算顺序不明确的时候加上()可以让程序易懂


若多个逻辑关系之间需要使用&&或||连接
只有当所有基本表达式计算结果都是true的时候&&连接后的表达式结果才是true 否则是false
只要有一个逻辑表达式的计算结果是true,则用||连接后的复杂表达式计算结果就是true


&&和||当前面计算已经可以得出表达式结果时,出现短路,后面的表达式不再计算


位操作符用来对二进制形式进行计算
双目位操作符包括按位与&,按位或|,按位异或^
双目位操作符都是先把参与计算的数据的二进制形式表达出来,然后两个数字的对应数位进行计算
只有 1 & 1=1 其他的都是0;
按位与(&)可以把一个数字中的某个二进制数位清除成0
某个数位和0做按位与的结果一定是0
某个数位和1做按位与的结果不变


按位或(|)对应数位上的数字进行或计算 只0 | 0 =0 其他的都是1
按位或可以把一个数字中的某些数位设置成0
某个数位和0做按位或结果不变
某个数位和1做按位或结果是1


按位异或(^)把对应上数位上的数进行异或运算  只有1 ^ 0=1 其他的都是0
按位异或(^)当两个数不同时得1,可以把一个数的某些数位求反
某个数位和0做按位异或结果不变
某个数位和1做按位异或便相反数字


作业:
1.如果年份能被4整除但不能被100整除则这个年份是闰年,如果年份可以被400整除则也是闰年,假设变量year中记录了一个年份,编写一个逻辑表达式当这个年份是闰年的时候结果是true否则是false
(year%400==0)||((year%4==0)&&(year%100!=0))    (!(year%400))||((!(year%4))&&(year%100))
2.使用一个char类型变量ch的最低三个二进制控制红绿的。bit0控制绿灯 bit1控制黄灯 bit2控制红灯 。数位是1点亮是0熄灭
1)编写语句在不知道变量内容的情况下点亮红灯熄灭另外两个灯   ch|100  
2)如果现在绿灯点亮,另外两个灯熄灭,编写语句熄灭绿灯点亮黄灯。ch^011
原创粉丝点击