进制转换不多,但我觉得适合小白(我爱夸自己嘿嘿)
练习
1. 确认基础类型所占用的内存空间(提示:使用sizeof 运算符):
在这里我说一下,long 类型通常占用 4 字节。在 64 位系统上,long 类型通常也可为 8 字节。
格式化符sizeof对应的是%zu懒得改了,%lu也行毕竟没报错
2.定义一个unsigned short 类型的变量,并赋值为0,确认该变量减一后的值是什么,(注意无符号数输出需要使用%u)
3.输入摄氏度转成华氏度输出 (摄氏 = (华氏-32)/1.8)
4. 按下面要求转换数据:
0356 --> 十六进制
0x47 ---> 十进制 ---> 八进制
1026 ---> 八进制----> 十六进制
手算:这里按照方法一点点来,我倒是学懂了
1.0356八进制数转十六进制,先将0356每一位数转换为三位二进制数,再由右向左每四位组在一起,不够补零。ABCDEF代表的数字是10-15,E是14,1414也就是EE
2.0x47(十六进制0x为前缀)
转十进制就直接乘以它本身的进制数,比如十六进制就乘以它的进制数16,十进制就算出来了((4*16^1+7*16^0=71))
十六进制转八进制把十六进制数每一位数字转为四位的二进制数再由右向左每三个排在一起,就可以了
3.1026十进制转八进制、十六进制
直接除以要转的进制数,直至商为0,看余数,倒着数就可以,如图所示。
代码:我暂时还不太会,但我决定还是先放上来吧
#include <stdio.h> // 引入标准输入输出库
#include <stdlib.h> // 引入标准库,用于处理转换int main(void)
{char hexInput[10]; // 声明一个字符数组,用于存储十六进制输入int decimal, octal, hex; // 声明三个整型变量,用于存储十进制、八进制和十六进制数// 八进制到十六进制printf("请输入一个八进制数:"); // 提示用户输入一个八进制数scanf("%o",&octal); // 使用%o格式符读取八进制数,并存储在变量octal中hex = octal; // 将八进制数直接赋值给十六进制数变量hex,因为八进制和十六进制数在数值上是一一对应的sprintf(hexInput,"%x",hex); // 使用sprintf函数将十六进制数转换为字符串表示,并存储在hexInput中printf("八进制数 %o 转换为十六进制数: %s\n",octal,hexInput); // 打印转换结果// 十六进制到十进制printf("请输入十六进制数:"); // 提示用户输入一个十六进制数scanf("%s",hexInput); // 使用%s格式符读取字符串形式的十六进制数decimal = (int)strtol(hexInput,NULL,16); // 使用strtol函数将十六进制字符串转换为十进制整数printf("十六进制数 %s 转换为十进制数是: %d\n",hexInput,decimal); // 打印转换结果//十六进制转八进制printf("请输入十六进制数:");scanf("%s",hexInput);hex = (int)strtol(hexInput,NULL,16); // 将十六进制数先转换为十进制octal = hex;// 将十进制数直接赋值给八进制数变量octal,因为十六进制和八进制的数值一一对应printf("十六进制数 %s 转换为八进制数是: %o\n",hexInput,octal);// 打印转换结果// 十进制到八进制printf("请输入一个十进制数:"); // 提示用户输入一个十进制数scanf("%d",&decimal); // 使用%d格式符读取十进制数octal = decimal; // 十进制数直接赋值给八进制数变量octal,因为它们在数值上也是一一对应的printf("十进制数 %d 转换为八进制数 %o\n",decimal,octal); // 打印转换结果// 十进制到十六进制printf("请输入一个十进制数:"); // 提示用户输入一个十进制数scanf("%d",&decimal); // 使用%d格式符读取十进制数sprintf(hexInput,"%x",decimal); // 使用sprintf函数将十进制数转换为十六进制字符串表示printf("十进制数 %d 转换为十六进制 %s\n",decimal,hexInput); // 打印转换结果return 0; // 程序结束
}
1、通过键盘输入一个通话秒数,编程显示通话用了几分钟几秒。
这里注意if语句应该是if(sec < 0),可以秒数可以为0,我懒得改动了,代码是改动过的
/*1、通过键盘输入一个通话秒数,编程显示通话用了几分钟几秒.*/#include <stdio.h>int main(void)
{int sec;int min;printf("请输入通话的秒数:");scanf("%d",&sec);if(sec <= 0){printf("输入错误,通话时间不能为负数,请重新输入!\n");return 1;}min = sec / 60;sec %= 60;printf("通话了%d分钟%d秒\n",min,sec);return 0;}
2、输入身高公制(cm),转换成英制(inch)(1inch = 2.54cm)。
/*2、输入身高公制(cm),转换成英制(inch)(1inch = 2.54cm)*/#include <stdio.h>int main(void)
{float height_cm,height_inch;printf("请输入您的身高(cm):");scanf("%f",&height_cm);if(height_cm < 0){printf("身高不能为负数,请重新输入!\n");return 1;}height_inch = height_cm / 2.54;printf("您的身高是%.2f英寸\n",height_inch);return 0;}
3、输入身高和体重,计算BMI指数(BMI = w/(h*h))。
/*3、输入身高和体重,计算BMI指数(BMI = w/(h*h))。*/#include <stdio.h>int main(void)
{float wei,hei,bmi;printf("请输入您的体重(kg):");scanf("%f",&wei);printf("请输入您的身高(m):");scanf("%f",&hei);bmi = wei / (hei * hei);printf("您的BMI指数是: %.2f\n",bmi);return 0;}
4.已经字符变量的值为 'p',如何使得该变量的输出为 'M',写出程序;
/*4.已经字符变量的值为 'p',如何使得该变量的输出为 'M'*/
/*p ASCII码112 M 77*/#include <stdio.h>int main(void)
{char var = 'p';var -= 35;printf("%c\n",var);return 0;}
5.将数字8输出为'8';
变量a被赋予了整数值8。当printf使用%c格式说明符时,它会将整数8转换为其对应的ASCII字符,即输出字符’8’。我是这么理解的,当然也可以直接输出字符'8'.
/*5.将数字8输出为'8'*/#include <stdio.h>int main(void)
{int a = 8;printf("%c\n",a);return 0;}//只输出字符'8'
printf("%c\n",'8');
6. 写出整型数 -56 在内存中的存储数据,如果将该内存的存储数据当作无符号整型数,则值是多少?(没记错的话,补码是其在存储方式)四个字节也就是11001000 11001000 11001000 1100100
内存存储方式: 按照整数数据的补码方式存放:
原码: 整型数据的二进制形式
有符号整数 (最高位符号位 (0:正数,1:负数)) + 数据位
无符号: 所有的二进制位都是数据位
反码: 除了符号位外,其余数据位取反(0--->1, 1--->0)
补码: 反码 + 1
正数: 原码,反码 和补码是相同的;
负数: 最高位符号位,其余位为数据位,采用补码方式存储,
差不多上述算就完事好像是这样不确定,就这样啦,我会的话会回来精进的啦,数应当是对的,让C自己算的哈哈哈
/*6. -56 如果将该内存的存储数据当作无符号整型数,则值是多少?*/#include <stdio.h>int main(void)
{int a = -56;printf("%u\n",a);return 0;}
.