c语言lesson02

来源:互联网 发布:网络电视播放器排行 编辑:程序博客网 时间:2024/05/31 19:41
进制:也就是进位制,是人们规定的一种进位方法.对于任何一种进制----x进制,就表示某一位置上的数运算时是逢x进一位.十进制是逢十进一,十六进制是逢十六进一.
进制转换:
十进制转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;

}


0 0
原创粉丝点击