以下代码在控制台正常输出会出现乱码

#include

int main(){

char a=197;

printf("%c",a);

return 0;

}

为什么呢?

前提条件说明,C语言中char类型默认是有符号类型(范围是-128~127之间)

首先这个197对应的字符是在ASCII表中存在的,就像0~255的ASCII表中显示的一样,之所以会输出问号或则其他不知名符号(乱码),是因为我们的电脑里面CMD默认的代码页是936(ANSI/OEM - 简体中文GBK),用于在控制台中显示中文的。所以才会有问号乱码的现象。如果需要显示出来128~255的字符(255是一个blank'FF'标准空值,不显示),就需要将控制台的代码页改成美国的标准:437(OEM-美国),就可以正常显示显示SCII码中128-255的特殊字符。

最简单的方法就是在程序中加上以下的头文件和命令就可以修改代码页的默认显示方式:

#include

#include

int main(){

SetConsoleOutputCP(437);

char a=197,b=198;

printf("%c %c",a,b);

}

通过以上修改,就可以正常显示ASCII表中对应的197和198字符,分别是 ┼ 和 ╞

其他字符也可正常显示。

除此之外,C语言中,当char是有符号类型的时,即表示范围为-128~127。在有符号char类型当中0 ~ 127和-128~-1这两段在存储上分为两个不同的段。

-128~-1存储为4个字节,前三个字节都为符号位,

比如-128就等表示为 11111111 11111111 11111111 10000000

-1则表示为    11111111 11111111 11111111 11111111

而我们想像中的-1应该表示为:(需要注意的是后七位并不是表示0,而是表示-1,0是由一个字节表示的且符号位为0)

11111111 11111111 11111111 1000000

我们想象中的-128应该表示为:(后七位并不是表示-127,理由同上。还需注意的是前三个字节是符号位,全为1表示负数)

11111111 11111111 11111111 11111111

而正数0~127段存储为一个字节,无符号位

比如1就表示为 00000001

127表示为 01111111

综上所述,数据在计算机中的存储形式是以补码的形式存储的,并且在C语言中有符号的char型,其负数段与正数段在内存的存储形式不一样,但其任然满足溢出就从最低范围循环计数的原理。

如有不足,欢迎指出。

标签:11111111,符号,C语言,char,127,128,255

来源: https://blog.csdn.net/qq_40596572/article/details/88668217

c语言输出字母是问号,关于C语言输出ASCII码128~255和有符号char型溢出的问题。此处大坑弄明白了后记录下来分享……...相关推荐

  1. 关于C语言输出ASCII码128~255和有符号char型溢出的问题。此处大坑弄明白了后记录下来分享……

    以下代码在Windows控制台正常输出会出现乱码 #include<stdio.h> int main(){char a=197;printf("%c",a);retu ...

  2. C语言输出ASCII码128~255和有符号char型溢出的问题记录

    C语言中char类型默认是有符号类型(范围是-128~127之间) 首先这个197对应的字符是在ASCII表中存在的,就像0~255的ASCII表中显示的一样,之所以会输出问号或则其他不知名符号(乱码 ...

  3. c语言将字母转换成ascii码,c语言函数toascii()怎么把整数转换成合法的ASCII码字符...

    c语言函数toascii()怎么把整数转换成合法的ASCII码字符?函数需要引入的头文件:#include 定义toascii()函数:int toascii(int c); toascii()函数使 ...

  4. c语言输出字母是问号,为什么数组输出会多一个问号

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:为什么数组输出会多一个问号回答:这个问题问的.是什么数组,int数组,char数组?什么叫多输出一个问好.最好把码贴出来,才知道是什 ...

  5. C语言大写字母对应的值,C4c语言输入3个小写字母输出其ASCII码值和对应的大写字母.doc...

    // lh1.cpp : Defines the entry point for the console application. // #include "stdafx.h" # ...

  6. c语言消字母游戏实验报告,C语言编程实验报告格式示例

    暨南大学数学系数学系,2011年语言课程设计课程实验项目目录学生姓名: 学生ID: 实验项目名称计划时间和课程每组人数实验属性开放要求要求摘要实验1熟悉使用WinTC / VC验证实验2数据类型,运算 ...

  7. c语言中字母大写转小写,C语言中字母大小写转换的简单操作

    大写字母要转换小写字母,要怎么操作呢?而在C语言开发中,我们经常会遇到这样或者那样的问题,别着急,爱站技术频道为你细细道来C语言中字母大小写转换的简单操作. C语言tolower()函数:将大写字母转 ...

  8. c语言中 字母对应的数值,c语言字母对应ascii码 实型数据,与字符型数据

    知识点:实型的定义方法和实型常量的表达方法; 重要程度:★★★★ 1.实型常量 在C语言中,实型常量有两种表示形式:小数形式和指数形式. (1)小数形式 规则如下:1. 有且仅有一个小数点. 2. 左 ...

  9. python 语言, 详解fromstring 函数 -------------从字符串到Ascii 码的转换

    先来个小例子: test = "abcdef" temp = numpy.fromstring(test,dtype=numpy.int8) print(temp) 结果为:[ 9 ...

最新文章

  1. 【Leecode】两数相加
  2. mysql5.7系列修改root默认密码
  3. php实现input输入框失去焦点自动保存输入框的数据
  4. linux shell sshpass 远程服务器 批量修改密码
  5. 要嫁就嫁程序员!原因很简单:五成表示工资愿交给另一半!
  6. 标本兼治:企业应揪出网络漏洞元凶
  7. mxnet基础到提高(44)-ndarray.arange创建行向量
  8. kube-controller-manager 配置参数解读
  9. 使用nodejs消费SAP Cloud for Customer上的Web service
  10. 线上lnmp环境快速安装
  11. android studio 新建工程慢,关于AndroidStudio新建与编译项目速度慢解决办法
  12. 浮云语音转文字识别本地音频文字内容教程
  13. 苹果系统 如何快速访问服务器,mac下的finder怎么使用技巧 苹果系统如何快速打开Finder...
  14. wxpython使用多进程_最简单方法远程调试Python多进程子程序
  15. GUI优化工具optimtool
  16. 在jsp中使用ECharts制作图表
  17. php执行who命令,Linux中的who命令实例介绍
  18. 海藻酸盐壳聚糖水凝胶微球载体/PLGA/nHA支架复合rhBMP-2壳聚糖纳米微球水凝胶的制备
  19. 基于STM32+华为云IOT设计的酒驾监控系统
  20. Arduino ESP32 WIFI 蓝牙模式触控按键切换

热门文章

  1. htc viveVR、SteamVR 如何实现看krpano制作的全景
  2. 三年半烧掉88亿、4个月市值暴跌7成,“生鲜电商第一股“每日优鲜首份财报不及格
  3. UML建模工具2021年8-11月更新(2)UModel 2022
  4. 网站优化-关键词排名优化
  5. android高德地图webview的显示不出来,Android 使用webview遇到的问题及解决办法
  6. 当当网api获取商品详情
  7. 思路与心态是SEO最重要的事情
  8. c# 反斜杠 双斜杠_C#程序打印反斜杠(\)
  9. 基于单片机汽车防盗报警系统设计汇编-protues仿真
  10. php 7.1.0 下载,PHP 7.1.1和7.0.15正式发布:源码下载 - IT之家