我菜故我学 2023-03-27 13:20 采纳率: 100%
浏览 48
已结题

计算机怎么区分ASCII码和普通二进制数的?

ASCII码中0的值是48,相应是00110000,但00110000不是也表示48这个整数吗?计算机怎么判断是48还是0?

  • 写回答

3条回答 默认 最新

  • weixin_31188147 2023-03-27 13:39
    关注

    计算机在存储和解释数据时,会根据表示方式的不同来区分ASCII码和普通二进制数。

    • 在ASCII编码中,每个字符都有一个唯一的编码值,这些编码值被表示成二进制数。ASCII码中的数字0的编码是48,而不是它的数值0。因此,计算机在解释48这个值时会知道它是ASCII码中的字符'0',而不是数值0。
    • 为了区分ASCII码和普通二进制数,计算机处理ASCII码时会使用特定的转换表将二进制值解释成对应字符。而对于普通二进制数,计算机会使用数学运算来处理它们的值。

    因此,计算机可以根据程序代码中所使用的变量或数据类型来判断数据是ASCII码还是普通二进制数,从而选择正确的解释方式。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 快乐鹦鹉 2023-03-27 13:25
    关注

    计算机只存储二进制数据,ASCII码程序才能认识

    评论 编辑记录
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-27 14:41
    关注
    • 给你找了一篇非常好的博客,你可以看看是否有帮助,链接:中文与ascii码相互转换解决乱码问题
    • 除此之外, 这篇博客: 二进制转十六进制和ASCII码中的 二进制转十六进制和ASCII码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    • 因为背不下ASCII码表,所以写了一个转换工具。

      C语言版本,由于能力有限,方法比较落后(努力提升中)

      先上代码:

      #include <stdio.h>
      #define N 1000
      
      int main()
      {
      	char binStr[N][10];	//用于存放二进制字符串
      	char hexStr[N][4];	//用于存放十六进制字符串
      	int n;
      	
      	while(scanf("%d", &n)!=EOF)
      	{
      		int i,j;
      		
      		for(i = 0; i < n; i++)
      		{
      			scanf("%s", binStr[i]);	//输入,小心别把换行符输进去了……
      		}
      		
      		printf("ASCII: \n	");
      		for(i = 0; i < n; i++)
      		{
      			int p = 1, temp = 0;
      			for(j = 7; j >= 0; j--)	//正着存进去,就倒着加和
      			{
      				temp = (binStr[i][j]-'0')*p + temp;	//运算时换成对应的 整型数值
      				p = p*2;
      			}
      			printf("%c", temp);
      		}
      		printf("\n");
      		
      		for(i = 0; i < n; i++)
      		{
      			int temp1 = 0, temp2 = 0;
      			int p = 1;
      			for(j = 3; j >= 0; j--)	//正着存进去,就倒着加和
      			{
      				temp1 = (binStr[i][j]-'0')*p + temp1;
      				p = p*2;
      			}
      			p = 1;
      			if(temp1<10)
      				hexStr[i][0] = temp1 + '0';
      			else hexStr[i][0] = temp1 % 10 + 'A';
      				//当 temp1大于十需要转换为'A'~'F'
      				
      			for(j = 7; j >= 4; j--)
      			{
      				temp2 = (binStr[i][j]-'0')*p + temp2;
      				p = p*2;
      			}
      			if(temp2<10)
      				hexStr[i][1] = temp2 + '0';
      			else hexStr[i][1] = temp2 % 10 + 'A';
      		}
      		
      		printf("Hex: \n	");
      		for(i = 0; i < n; i++)
      		{
      			for(j = 0; j < 2; j++)
      				printf("%c", hexStr[i][j]);
      			printf(" ");
      		}
      		printf("\n\n");
      	}
      
      	return 0;
      }
      

      输入:

      42
      01100110 01101100 01100001 01100111 01111011 01100011 01100101 00110011 01100101 00110101 00110000 00110010 01100011 00101101 00110100 00111000 01100011 00111001 00101101 00110100 01100100 00110101 00110000 00101101 00111001 00111001 00111001 00110000 00101101 00110101 01100010 00111000 00110001 01100100 01100010 00110110 01100110 01100011 01100010 01100110 00110000 01111101


      运行结果:
      在这里插入图片描述

    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月4日
  • 已采纳回答 3月27日
  • 创建了问题 3月27日

悬赏问题

  • ¥20 win10商店接入问题
  • ¥15 java 这种树形框吗
  • ¥40 找同学帮敲Python代码
  • ¥15 MYSQL 订单的商品明细重复计算问题
  • ¥15 微信实时共享位置修改
  • ¥100 TG的session协议号转成直登号号后客户端登录几分钟后自动退出设备
  • ¥50 共模反馈回路的小信号增益
  • ¥15 arduino ssd1306函数与tone函数放歌代码不兼容问题
  • ¥70 0.96版本hbase的row_key里含有双引号,无法deleteall
  • ¥15 诊断性META分析合并效能的检验