(本篇是基于嵌入式基础学习1中笔记进行的实战练习,代码存在疑问,还望大家多多指正)
456是十进制:十进制转换为8进制,需先转换成2进制
456转2进制:456=256+125+64+8=2^8+2^7+2^6+2^3
=111001000
转换为8进制:111=7 001=1 000=0 (三者为一组)
结果为0710
0456为8进制,则要转换为16进制,需先转换为2进制
0456转2进制:(因2进制转换为8进制为三个为一组)
0456=100 101110
转换为16进制:(从右到左,四个为一组)
结果0x12e
0X456为十六进制,则要转换为8进制,需要先转换为2进制
0X456转换为2进制:0100 0101 0110
2进制转换为8进制:(三个为一组)结果为:0212
//注意关键字:char 字符型 有1个字节,占8位,
456为十进制,转换为二进制:456=256+125+64+8=2^8+2^7+2^6+2^3=111001000(这是补码)
补码-1=反码: 111000111
反码取反=原码: 100111000 //第一位1位符号位,不进行改变转换为十进制:=-56
a=2 ;b=2; c=0 ;d=1
//数据在类型中进行存储时,一定要按二进制形式进行存储,负数是按照补码进行存储的
-1: 10000001(补码)11111110(反码)11111111(原码=反码+1)
右移: 11(这里缺位,看前面符号位,如果为-1,即补1,如果为0,即为0)111111
a=-1;c=-1
a=a& (~(0xf<<4));
a& (~(00000000000000000000000011110000 ))
a& (11111111111111111111111100001111)
-32768
//2^15 - 1,有符号short类型最大的正数,最大正数加1,符号位变为1,其他变为0=最小负数再减一:-32767-1=-32768
char a;
printf("please input Y|N:n");
a=getchar();
if(a=='Y')
puts("ok");
if(a=='N')
puts("NO");
int main(){char a = 1;while(a++);}该程序是不是死循环?不是
从右向左计算!!!13 13 11 13
#include <stdio.h>
int main(int argc, char*argv[])
{ int y;printf("please input year: ");scanf("%d", &y);
if(y%4==0&&y%100!=0){puts("闰年");}elseif(y%100==0&&y%400==0){puts("闰年");}else{puts("不是闰年");}return 0;
}
#include <stdio.h>
int main(int argc, char*argv[])
{ for(inti=0; i<=100; i++){if(i%2==0)printf("%d ", i);}puts("");return 0;
}
一个三位数,它的个位十位百位的立方和等于它本身
#include <stdio.h>
int main(int argc, char*argv[])
{ int a, b, c;for(int i=100; i<1000; i++){a=i/100;b=i/10%10;c=i%10;if(i==a*a*a+b*b*b+c*c*c){printf("%d ", i);}}puts("");
int i=100;while(i<1000){a=i/100;b=i/10%10;c=i%10;if(i==a*a*a+b*b*b+c*c*c){printf("%d ", i);}i++; }puts("");return 0;
}
#include <stdio.h>
int main(int argc, char*argv[])
{ for(int i=1; i<10; i++){for(int j=1; j<=i; j++){printf("%d * %d = %-3d", i, j, i*j);}puts("");}
return 0;
}
*
***
*****
********
**********
#include <stdio.h>
int main(int argc, char*argv[])
{ int N, i, j, z;printf("please input num: ");scanf("%d", &N);
for(i=1; i<=N; i++){for(z=1; z<=N-i; z++)printf(" ");for(j=1; j<=2*i-1; j++)printf("*");puts("");}
return 0;
}
#include <stdio.h>
int main(int argc, char*argv[])
{ int j;for(int i=2; i<1001; i++){for(j=2; j<i; j++){if(i%j==0)break;}if(j==i){printf("%d ", i);}}puts("");return 0;
}
第2题:
#include <stdio.h>int main(int argc, char*argv[])
{int a;while(a<=100){if(a%2==0);printf("%-3d",a);a++;continue;}puts("");return 0;
}
第3题:
#include <stdio.h>
int main(int argc, char*argv[])
{ int a, b, c;int i=100;while(i<1000){a=i/100;b=i/10%10;c=i%10;if(i==a*a*a+b*b*b+c*c*c){printf("%d ", i);}i++; }puts("");return 0;
}
#include <stdio.h>
int main(int argc, char*argv[])
{ int i=1, sum=0;
loop:sum+=i;i++;if(i<=100)gotoloop;printf("sum = %dn", sum);return 0;
}
int a=0;
for(int n=0; n<4; n+=2){switch(n){case0:a+=3;case1:a*=2;break;case2:a-=3; //第二次,当n=2时,上次循环a=6,需带到这一个循环中case3:a+=2;default:a=0;} printf("%dn", a);
}输出结果是? 60
#include <stdio.h>
int main(int argc, char*argv[])
{ int n;printf("please input num: ");scanf("%d", &n);int a[n];for(int i=0; i<n; i++) //{printf("please input arr[%d]: ", i);scanf("%d", &a[i]);}
int sum=0; //避免有新元素干扰,进行初始化,如果是乘法,初始化应该为1for(int i=0; i<n; i++) //遍历数组{sum+=a[i]; //元素求和公式}
printf("%dn", sum);return 0;
}
#include <stdio.h>
int main(int argc, char*argv[])
{//x记录最大元素的下标int a[5] = {11, -7, 9, 3, 10}, max=a[1], x=1; //如果max初始化为0时,不会引用新的数据,不严谨for(int i=0; i<5; i++) //{if(max<a[i]){max=a[i];x=i;}}printf("max:%d pos:%dn", max, x);return 0;
}
#include <stdio.h>
int main(int argc, char*argv[])
{ char buf[20] = {0}; //定义一个字符数组puts("input string:"); //键盘输入gets(buf);
for(int i=0; buf[i] !='