马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 hxliu 于 2017-7-13 17:39 编辑
S1E7
一、
CPU能读懂的最小单位(只能存放0和1):比特位,bit,b
内存机构的最小寻址单位:字节,Byte,B
1Byte == 8bit
一个字节可以表示的最大的数:11111111(二进制),255(十进制),FF(十六进制)
二、
存放signed类型的存储单元中,左边第一位表示符号位
0:正数
1:负数
三、
计算机是用补码形式来存放整数的值
正数的补码是该数的二进制形式
负数的补码
1)先取得该数的绝对值的二进制形式
2)再将第1步的值按位取反
3)最后将第2步的值加1
四、作业
一个字节可以表示的最大的二进制数是1111 1111
由于左边第一位是符号位,因此最大带符号整数是:0111 1111(十进制为127)
用64位存放long long 值(unsigned long long),可以存放的最大整数为2^64-1,这是一个20位十进制数
二进制(补码)转换十进制
看了扩展阅读后懒得用计算器,于是傻傻得写了个笨笨的程序算的2333
代码如下#include <stdio.h>
#include <math.h>
int main()
{ int a = 1;
int b = 1;
int c = 1;
int d = 1;
int e = 1;
int f = 0;
int g = 0;
int h = 0;
int result;
//abcdefgh分别对应=>位权876543210,这里需要逐个修改。。。后续我...会想办法让他更简洁。。。目前只能这么笨的方法了0.0
//符号位为0时用第一条,为1时用第二条
//result = a*pow(2,7)+b*pow(2,6)+c*pow(2,5)+d*pow(2,4)+e*pow(2,3)+f*pow(2,2)+g*pow(2,1)+h*pow(2,0);
result = -a*pow(2,7)+b*pow(2,6)+c*pow(2,5)+d*pow(2,4)+e*pow(2,3)+f*pow(2,2)+g*pow(2,1)+h*pow(2,0);
printf("二进制转换为十进制result = %d\n",result);
return 0;
}
十进制转二进制
.
.
.
.
.
.
GG暂时写不出来0.0
猜测如下图。。。也不知道对不对……
打印-1和255
unsigned char(0~255)
signed char (-128~127)
%c打印char类型字符
%d打印带符号数
%u打印无符号数
hh表示signed char 和unsigned char 长度
代码如下#include <stdio.h>
int main()
{
signed char i;
unsigned char j;
i = 255;
j = 255;
printf("signed char %hhd\n",i);
printf("unsigned char %hhu\n",j);
return 0;
}
scanf函数
①转换字符
c:读取一个字符
d:读取一个十进制整数(可加符号)
x:读取一个十六进制整数(可加符号);十六进制数以0x或0X开头
②附加参数
该参数的个数由格式化字符串决定
普通变量名前加&符号
作业代码如下#include <stdio.h>
#include <math.h>
int main()
{
int a;
double result;
printf("请输入一个整数:");
scanf("%d",&a);
result = pow(a,5);
printf("%d的五次方是:%.2f\n",a,result);
return 0;
}
|