计算机中的数据有三种表示方法:原码,反码,和补码
所有的运算与存储都是以补码形式运算
原码,反码,补码均有符号位和数值位两部分
符号位为:0 表示“正”
1 表示 “负”例如:0101 5 1101 -5存储和运算时均使用补码,这样可以将符号位和数值域统一处理,将加法和减法也统一处理
反码
反码:正数的反码与其原码相同,负数的反码是除符号位意外对其原码诸位去反
+10的原码:
00000000 00001010
+10的反码:
00000000 00001010
-10的反码:
11111111 11110101
补码
补码:正数的补码与原码相同,负数的补码是在其反码的末位+1(二进制类型的+1)
-10的补码11111111 11110110
补码的意义
补码的意义:符号位和数值域统一处理,将加法和减法可以统一处理
10-10------>10+(-10)
+10的补码:00000000 00001010
-10的补码: 11111111 11110110
经过等于0 :00000000 00000000
溢出:
(补码之间相互对应相加,不断向上进一,最后一个一“溢出”)溢出情况:int分为long(int)和short(int),
short(int)字符范围为:-32768~+32767 (如果超出范围,溢出,(运算是所使用符合范围的整数标准类型))整数类型浮点类型
注意:e或者E----->10实数型的表示:
1,有字母e或者E2,e之前必须有数值
3,e之后必须为整数
例如:123=1.23X10^2 <===>1.23e2
字符类型:用一对单引号括起来的单个字符,如:‘a’ ,‘b’
字符串常量:双引号括起来的字符序列ASCII字符代码表ASCII表
类型
char:通常是一个字节(八位),一个整数类型
int:整型
float:单精度浮点数,一个符号,8位指数,23位小数
double:双精度浮点数,一位符号,11位指数,52位小数
void:表示类型的确实
数据类型的转换:
1:隐形转换:
自动类型转换:(算数转换)(不同类型数据运算转换成相同数据以便运算长度更长,精度更高)
赋值转换:(赋值两端数据类型相等)赋值转换统一左边类型
输出转换
函数调用转换
2,显式转换:
强制转换:(类型名)表达式 :表达式按照括号类型转换(浮点数强制整型,不四舍五入,直接舍)
C语言标准库函数转换双精度
变量
#include "stdio.h"int main()
{
int price=0; //定义一个变量,变量的名称为price,类型为int,初始值是0 printf("请输入金额(元):");
scanf("%d",&price);
int change = 100 - price;
printf("找您%d元。\n",change);
return 0;
}
变量的一般形式:<类型名称><变量名称>
int price;
int amount;
int price,amount;
标识符构建结构与Python相同
初始化:当赋值发生在定义变量的时候,就是变量的初始化
变量初始化
<类型名称><变量名称>=<初始值>;
int price =0 ;
int amount =100;
int price=0,amount=100;//组合变量定义时,也可以在这个定义中单独给单个变量赋值
变量类型:int类型:一旦确认,在这个程序中就是int
读入数:
scanf把一些数据输入 ---全称scan format
scanf("%d",&price);
要求scanf这个函数读入下一个整数,读到的结果赋值给变量price
注意price前面的&
常量:
int change = 100 - price
固定不变的数,是常数。直接写在程序里,我们称作直接量(literal)
更好的方式,是定义一个常量
const int AMOUNT = 100;
#include "stdio.h"int main()
{
const int AMOUNT = 100;
int price = 0;
printf("请输入金额(元):");
scanf("%d",&price);
int change =AMOUNT -price; //更容易理解数字的含义 printf("找您%d元。\n",change);
return 0;
}
const(一般情况下,全部大写)是一个修饰符,加在int的前面,用来给这个变量加上一个const(不变的)的属性。这个const的属性表示这个变量的值一旦初始化,就不能再修改了
#include "stdio.h"int main()
{
int amount = 100;
int price = 0;
printf("请输入金额(元):");
scanf("%d",&price);
printf("请输入票面");
scanf("%d",&amount);
int change =amount -price;
printf("找您%d元。\n",change);
return 0;
}
当读入多个变量
#include "stdio.h"int main()
{
int a;
int b;
printf("请输入两个整数:");
scanf("%d %d",&a,&b);
printf("%d + %d =%d\n",a,b,a+b);
return 0;
}
英尺转换:
#include "stdio.h"int main()
{
printf("请输入身高的英尺和英寸,""如输入\"5 7\"表示5英尺7英寸");
int foot;
int inch;
scanf("%d %d",&foot,&inch);
printf("身高是%f米。\n",((foot +inch/12)*0.3048));
return 0;
}
以上的结果运行,并非我们想要的结果
因为:两个整数的运算的结果只能取整数(会将小数本分去掉)
浮点数:带小数点的数值
改进上面代码:将12 改为12.0 ,int是定义为int类型的变量,如果把int换成double,我们就把它改为double类型的浮点数变量
double的意思是“双”,它本来是“双精度浮点数”的第一个单词,人们用来表示浮点数类型,除了double,还有flout(意思就是浮点!)表示单精度浮点数
#include "stdio.h"int main()
{
printf("请输入身高的英尺和英寸,""如输入\"5 7\"表示5英尺7英寸");
double foot;
double inch;
scanf("%lf %lf",&foot,&inch);//输入整数的时候用%d,输入double我们用%lf printf("身高是%f米。\n",((foot +inch/12)*0.3048));
return 0;
}
计算时间差:
#include "stdio.h"int main()
{
int hour1,minute1;
int hour2,minute2;
scanf("%d %d",&hour1,&minute1);
scanf("%d %d",&hour2,&minute2);
int t1 =hour1 *60 +minute1;
int t2 =hour2 *60 +minute2;
int t=t2-t1;
printf("时间差是%d小时%d分。",t/60,t%60);
return 0;
}
程序表达的是顺序执行的动作,
数字之间的交换
#include "stdio.h"int main()
{
int a=5;
int b=6;
int t;
t=a;
a=b;
b=t;
printf("a=%d,b=%d\n",a,b);
return 0;
}
// 输出:a=6,b=5
递增递减运算符:
“++”和“--”是两个很特殊的运算符,它们是单目运算符(注意优先级别),这个算子还必须是变量。这两个运算符分别叫做递增和递减运算符,他们的作用是给这个变量+1或者-1.
count++;
count+= 1;
count= count + 1;
前缀后缀:
++和--可以放在变量的前面,叫做前缀形式,也可以放在变量的后面,叫做后缀形式
a++的值是a加上1以前的值,而++a的值是加了1以后的值,无论哪个,a自己的值都加了1了。
#include "stdio.h"int main()
{
int a;
a=10;
printf("a++=%d\n",a++);
printf("a=%d\n",a);
printf("++a=%d\n",++a);
printf("a=%d\n",a);
return 0;
}
// 输出:a++=10
a=11
++a=12
a=12
倒叙数列代码测试:
#include "stdio.h"int main()
{
int hundred;
int one;
int ten;
printf("每个测试是一个3位的正整数");
int i;
scanf("%d",&i);
hundred=i/100;
printf("hundred=%d\n",hundred);
one=i%10;
printf("one=%d\n",one);
ten=i-hundred*100-one;
printf("ten=%d\n",ten);
printf("输出逆序的数%d",hundred+ten+one*100);
return 0;
}
微信关注:foryouos