二进制:逢二进一 (1~0)
八进制:逢八进一(7~0)0123
十六进制:逢十六进一(f~a 9~0)
相互之间的转换
int a; //定义变量:说明变量的数据类型,分配资源(存储空间)
变量:存放数据,数据可变
常量:只能读,不能写,数据不可变
c语言中,变量必须先定义,后使用
a=123;//初始化:第一次以输入的方式,赋值给变量
// 常量不可变
printf("a=%d a=%i");//%d %i是十进制
//%x %X是十六进制
//%o %0 是八进制
i=a/2;
j=a%2;
while(0!=i)
{
//int类型的除法,分取整合取余
printf("i=%i/t/tj=%d\n",i,j);
i=i/2;
j=j%2;
1、利用上面的是,分,秒显示出来
进位机制:
四舍六入五单进
浮点数只有一种除法
int 有两种除法
位运算:可以加密解密 2\利用异或自己设计一种加密
明文
密文
int a;
scanf("%d",&a);
a=a^2;
printf("a=%d\n",a);
a=~a;
printf("a%d\n",a);
a=a | 0x2;
printf("a=%d",a);
a=a & 0x2;
printf("",a);
a=a<<0x1
a=a>>0x1
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
1. 按位与运算
按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
main(){
int a=9,b=5,c;
c=a&b;
printf("a=%d/nb=%d/nc=%d/n",a,b,c);
}
2. 按位或运算
按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下: 00001001|00000101
00001101 (十进制为13)可见9|5=13
main(){
int a=9,b=5,c;
c=a|b;
printf("a=%d/nb=%d/nc=%d/n",a,b,c);
}
3. 按位异或运算
按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)
main(){
int a=9;
a=a^15;
printf("a=%d/n",a);
}
4. 求反运算
求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。例如~9的运算为: ~(0000000000001001)结果为:1111111111110110
5. 左移运算
左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,
高位丢弃,低位补0。例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。
6. 右移运算
右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1
,逗号运算符
i++: i=i+1;-> a=i++,a=i;i=i+1;
++i: i=i+1;->i=i+1; a=i;
#include <stdio.h>
int main()
{
int a,i;
a=0;
i=1;
/*
a=(1,2,3,4,5,6,7,8,9,12);
printf("^_^ a=%d\n",a);
*/
a=(1,2,i=3,4,5,i+6,i-7,8,i+=9,(--i)+(i++)+(++i)+(i++));
printf("^_^ a=%d\n",a);
printf("i=%i\n",i);
/*
i=1;
a=i++; printf("a1=%d\n",a);
i=1;
a=(i++)+(i++); printf("a2=%d\n",a);
i=1;
a=(i++)+(++i); printf("a3=%d\n",a);
i=1;
i=++i;
i=++i;
a=i+i;
a=(++i)+(++i); printf("a4=%d\n",a);
*/
return 0;
}
1、条件判断的
(1)switch (x)
case 1:
case 2:
case 3:
default:
(2)if(表达式)
2、循环
for(int i=0;i<10;i++)
{
}(1)int i=0;
(2)i<10;
(3){循环体}
(4)i++
其中的for的格式
int i;
i=0;
for(;i<10;I++)
int i;
i=0;
for(;i<10;)
{i++;
.....---->注意输出的个数等。
}
int i;
for(i=0;i<10;)
{
i++;
......
}
这里的i的类型不能为无符号的,不然就会陷入死循环。
(2)while()这个函数一般用于死循环
(3)do while();不常用
3、四种返回值
return;程序结束;
break:结束本层的操作并跳出
beak语句的作用
(1) 只能在循环体内和switch语句体内使用break语句。
(2) 当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。
(3) 当break出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环体。
(4) 在循环结构中,应用break语句使流程跳出本层循环体,从而提前结束本层循环。
continue语句作用
(1) continue语句的一般形式为:contonue;
(2) 其作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定。
(3) 注意:执行continue语句并没有使整个循环终止。在while和do-while循环中,continue语句使得流程直接跳到循环控制条件的测试部分 ,然后决定循环是否继续进行。
(4) 在for 循环中,遇到continue后,跳过循环体中余下的语句,而去对for语句中的“表达式3”求值,然后进行“表达式2”的条件测试,最后根据“表达式2”的值来决定for循环是否执行。在循环体内,不论continue是作为何种语句中的语句成分,都将按上述功能执行,这点与break有所不同。