鱼C论坛

 找回密码
 立即注册
查看: 2348|回复: 0

[技术交流] 《带你学C带你飞》S1E7学习笔记

[复制链接]
发表于 2017-7-13 17:40:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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
代码如下
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {        int a = 1;
  5.         int b = 1;
  6.         int c = 1;
  7.         int d = 1;
  8.         int e = 1;
  9.         int f = 0;
  10.         int g = 0;
  11.         int h = 0;
  12.         int result;
  13. //abcdefgh分别对应=>位权876543210,这里需要逐个修改。。。后续我...会想办法让他更简洁。。。目前只能这么笨的方法了0.0
  14.        
  15. //符号位为0时用第一条,为1时用第二条
  16.         //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);
  17.         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);
  18.         printf("二进制转换为十进制result = %d\n",result);
  19.        
  20.         return 0;
  21. }
复制代码


十进制转二进制
.
.
.
.
.
.
GG暂时写不出来0.0
猜测如下图。。。也不知道对不对……
10-2.png

打印-1和255
unsigned char(0~255)
signed char (-128~127)
%c打印char类型字符
%d打印带符号数
%u打印无符号数
hh表示signed char 和unsigned char 长度
代码如下
  1. #include <stdio.h>

  2. int main()
  3. {       
  4.         signed char i;
  5.         unsigned char j;
  6.        
  7.         i = 255;
  8.         j = 255;
  9.        
  10.         printf("signed char %hhd\n",i);
  11.         printf("unsigned char %hhu\n",j);
  12.        
  13.         return 0;
  14. }
复制代码


scanf函数
①转换字符
c:读取一个字符
d:读取一个十进制整数(可加符号)
x:读取一个十六进制整数(可加符号);十六进制数以0x或0X开头
②附加参数
该参数的个数由格式化字符串决定
普通变量名前加&符号
作业代码如下
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {       
  5.         int a;
  6.         double result;
  7.        
  8.         printf("请输入一个整数:");
  9.         scanf("%d",&a);
  10.        
  11.         result = pow(a,5);
  12.         printf("%d的五次方是:%.2f\n",a,result);
  13.        
  14.         return 0;
  15. }
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
小甲鱼 + 4 + 4 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 23:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表