现在的位置: 首页 > 综合 > 正文

那些苦逼日子的学习(C语言)05

2013年12月10日 ⁄ 综合 ⁄ 共 2683字 ⁄ 字号 评论关闭

受朋友委托,帮他发CSDN上来,原创,转载请留下原文地址,谢谢!

判等运算符
C语言中表示不关系运算符与其它编程语言的相同,但是判等运算符有着独一无二的形式:
== 等于(数学  =)
!= 不等于
  1. #include<stdio.h>

  2. int main(){
  3.     int data = 0;
  4.     printf("Please input 10:\n");
  5.     scanf("%d",&data);
  6.     if(data == 10){
  7.         printf("The number you enter is 10.\n");
  8.      }
  9.     if(data != 10){
  10.         printf("The number you enter not 10.\n");
  11.     }
  12.     return 0;
  13. }

复制代码

图片18.png 
逻辑运算符
逻辑运算符所产生的结果:逻辑结果,0或者1,当然操作数的数值经常是1或者0,所以逻辑运算符将任何非零操作数作为真值来处理,同事将任何的零值操作数作为假值来助理
&& 逻辑与     || 逻辑或   逻辑非 
 
运算规则
表达式
表达式1 && 表达式2
表达式表达式2   结果
真 真 真
真 假 假
假 真 假
假 假 假
表达式1 || 表达式2
表达式表达式2   结果
真 真 真
真 假 真
假 真 真
假 假 假
短路特性:
表达式1 && 表达式2  如果表达式1为假  就不会进行表达式2的计算
表达式1 || 表达式2   表达式1为真,就不会进行表达式2的计算
还有一个短路运算符:   ?:
  1. #include<stdio.h>

  2. int main(){
  3.     int i = 0,j = 0;
  4.     if(++i || ++j);
  5.     if(--i && ++j);
  6.     printf("i = %d , j = %d\n",i,j);
  7.     return 0;
  8. }

复制代码


位运算特性:参加位运算的操作数转换二进制
按位取反
~3
...0000 0011
...1111 1100
  1. #include<stdio.h>

  2. int main(){
  3.     int i = 3;
  4.     printf("~i = %d\n",~i);
  5.     return 0;
  6. }

复制代码

图片19.png
这个例子我们可以发现:3按位取反是-44按位取反是-5 那么:n按位取反就是-(n+1)
按位与
经常用来屏蔽某些二进制位(0)。也可以知道某一个数的某一位是1还是09
3&5
...0000 0011
...0000 0101
      0001
     按位或
经常用来将某些二进制位置1,也可以知道某个二进制为是1还是0
3 | 5
...0000 0011
...0000 0101
  0111
按位异或
可以用来将指定的位反转
3 ^ 5
...0000 0011
...0000 0101
  0110
运算规则:对应二进制位上的数字仙童,则结果为0,否则为1
写个程序判断一下某个整数的二进制格数倒数第三位是0还是1
  1. #include<stdio.h>

  2. int main(){
  3.     int data = 0;
  4.     printf("Please enter an integer:\n");
  5.     scanf("%d",&data);
  6.     if((data & 4) == 4){
  7.        printf("The third is 1\n");
  8.     }else{
  9.        printf("The third is 0\n");
  10.     }
  11. }

复制代码



左移:1010 0101  << 1
      0100 1010
  右移的时候右边的空位补零
右移:1010 0101 >>1
  右移 左边空位补上符号位
正数:左移一位  相当于乘以2
  右移以为  相当于除以2
下面我们看看代码怎么实现输出一个整数的二进制数

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(void) {
  4.     int num, a[32], i = 0;//定义变量
  5.     printf("Please enter a decimal integer:\n");//提示用户输入内容
  6.     fflush(stdout);//强制刷新
  7.     scanf("%d", &num);//接收从键盘上输入的内容
  8.     while (num != 0) {
  9.         a[i++] = num % 2;
  10.         num = num / 2;
  11.     }
  12.     for (i--; i >= 0; i--) {
  13.         printf("%d", a[i]);
  14.     }
  15.     printf("\n");
  16.     return 0;
  17. }

复制代码




取地址运算
1.&运算符取地址
2.* 根据地址取变量
3.printf中的%p用来输出地址
4.取地址取得是一个变量的开始地址
5.地址的按字节编号的
  1. /*
  2. 使用&取地址符
  3. */
  4. #include <stdio.h>

  5. int main(){
  6.     int val = 10;
  7.     printf("&val = %p\n",&val);
  8.     printf("*(&val) = %d\n",*(&val));
  9.     return 0;
  10. }

复制代码

条件运算符

<1>条件?表达式1:表达式
 
C语言中唯一的一个三元运算符
<2>表达式为:表达式1?表达式2:表达式3
先求解表达式1,若其值为真(0)则表达式2的值作为整个表达式的取值
否则(表达式1的值为0)将表达式3的值作为整个表达式的取值
  1. /*

  2. 见输入的小写字母转换为大写字母,要是如数大写字母则大写字母不变

  3. */
  4. #include <stdio.h>

  5. int main(){
  6.     char c;
  7.     printf("Please enter a letter:");
  8.     scanf("%c",&c);
  9.     printf("Result:%c\n",c >= 'a' && c <= 'z'?c - ('a' - 'A'):c);
  10.     return 0;
  11. }

复制代码





隐形类型的转换
编译器自己进行的 ,不需要干预
char + int
int + unsigned int
下面我们看看:int 和 unsigned int 进行混合运算
首先将int转换成unsigned int参与运算
  1.   #include <stdio.h>
  2.   
  3.   int main(){
  4.       int i = 12;
  5.       unsigned int j = 6;
  6.       if((i + j) < 0){
  7.           printf("OK----\n");
  8.       }else{
  9.           printf("Ng----\n");
  10.      }
  11.       return 0;
  12.   }

复制代码

注意:

浮点和整形的运算 转成  浮点后在运算
short int / char 的运算转成int 后 运算
如果自己想进行类型的转换,那么可以使用强制类型转换
(目标类型) ,如:  int
i = 0; char c = (char)i;
类型转换其实就是建立了一个新的变量,新的内存空间

首发地址:http://www.bcwhy.com/thread-18618-1-1.html

抱歉!评论已关闭.