求两个数的较大值
要求:写一个函数秋凉书的较大值
第一种无函数
#include <stdio.h>
int main()
{
int num1=10;
int num2=20;
if(num1>num2)
printf("较大值是:%d\n",num1);
eles
printf("较大值是:%d\n",num2);
return 0;
}
第二种 有函数
#include<stdio.h>
int Max(int x,int y)
{
if(x>y)
return x;
else
return y;
}
int main()
{
int num1=10;
int num2=20;
int max=0;
max=Max(num1,num2);
printf("max=%d\n",max);
return 0;
}
sizeof的用法(操作数的类型和长度-以字节为单位)
#include<stdio.h>
#include<string.h>
int main
{
int a=10;
int arr[]={1,2,3,4,5,6}; //6*4=24
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(int));
printf("%d\n",sizeof a);
printf("%d\n",sizeof(arr)); //计算数组大小,单位是字节
printf("%d\n",sizeof(arr)/sizeof(arr[0])); //6
return 0;
}
原码反码补码之间的关系
机械数
一个数在计算的存储形式是二进制数,我们称这些二进制数为机械数,机械数是有符号,在计算机中用机械数的最高位存放符号位,0表示整数,1表示负数。
机械数的真值
因为带有符号位,所以机械数的形式值不等于去其真值,以机械数10000111为例,其真正表示的值为-7,而形式值为135。(将带符号的机械数的真正表示的值称为机械数的真值)
原码
原码的表示与机械数真值表示的一样,即用第一位表示符号,其余位表示数值
例如十进制的正负1,用八位二进制的原码表示如下;
+1=原:00000001 -1=原:10000001
反码
反码的表示方法: 1.正数的原码是其原码本身
2.负数的原码是在其原码的基础上,符号位不变,其余各位取反
+1=原:00000001 =反:00000001
-1=原:00000001 =反:11111110
补码
正数的补码是其原码本身
负数的补码是在其原码的基础上,符号位不变,其余各位取反后加1(即在反码的基础上+1)
+1=原:00000001 =反:00000001 =补:00000001
-1=原:00000001 =反:11111110 =补:11111111
数据在计算机中的存储形式
计算机实际只存储补码,所以原码准换为补码的过程,也可以理解为数据存储到计算机内存中的过程
计算机输入数据(-1)(转换为原码)原码(1000001)(转换为反码)反码(11111110)(转换为补码)补码(11111111)存储到计算机内存
在原码反码补码,正数的表示是一模一样的,而负数的表示是不相同的,所以对于负数的补码来说,我们是不能直接用进制转换将其转换为十进制数值的,因为这样是得不到计算机真正存储的十进制数的,所以应该将其转换为原码后,再将转换得到的原码进行禁止转换为十进制数
~ 对一个数的二进制按位取反
#include<stdio.h>
int main()
{
int a=0; 一个字节,32个比特位
int b=~a; b是有符号的整形
按照二进制位取反
00000000000000000000000000000000
11111111111111111111111111111111
原码,反码,补码
负数在内存中存储的时候,存储的是二进制的补码
printf(“%d\n”,b); 使用的,打印的是这个数的原码
return 0;
}