C语言 字符变量在最高位的符号问题 谁帮我解释下标准ASCII码(0-127)和非标准(128-

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 字符变量在最高位的符号问题 谁帮我解释下标准ASCII码(0-127)和非标准(128-相关的知识,希望对你有一定的参考价值。

C语言 字符变量在最高位的符号问题

谁帮我解释下标准ASCII码(0-127)和非标准(128-255)的最高位为什么分别是0和1?

如图 char a=158,最高位为1,那么输出不应该是-58吗?为啥是-98呢

参考技术A a是有符号数,158用二进制表示为10011110,最高位为1,表示负数;而负数的存储使用补码表示,补码求法是,最高位不变,其他位求反再加1,即为:11100001 + 1 = 11100010,转换成十进制就是-98!追问

帮我解释下标准ASCII码(0-127)和非标准(128-255)的最高位为什么分别是0和1?

不知道怎么理解

追答

标准ASCII码(0-127)最高位表示符号位,0表示正数,1表示负数,不表示数值;非标准(128-255)最高位不是符号位,表示数值!

本回答被提问者采纳
参考技术B 158存储的是8位二进制数1001 1110
当作有符号数输出就是-98了
0,1的不同就是看第一位是不是作为符号位
望采纳追问

帮我解释下标准ASCII码(0-127)和非标准(128-255)的最高位为什么分别是0和1?

追答

就是两种存储方式,容量都是128,只不过对应的编号不一样
然后你用同样的方式输出自然不一样了
0~127对应二进制0000 0000~0111 1111
128~255对应1000 0000~1111 1111
这样懂了吧

参考技术C char a = 158
由于已经超出char型范围,实际保存的值是158-256 = -98。

从你的提问中可以看出,你根本没看懂教材。或许你连计算机里使用的是二进制都不知道?

C语言:怎么将十六进制字符串转换成二进制字符串,谁帮我写个函数

参考技术A 十六进制转成十进制的函数:
//返回16进制字符串s对应的整数值,遇到任何一个非法字符都返回-1。
int HexToDec(char *s)

char *p = s;

//空串返回0。
if(*p == '\0')
return 0;

//忽略开头的'0'字符
while(*p == '0')
p++;

int dec = 0;
char c;

//循环直到字符串结束。
while(c = *p++)

//dec乘16
dec <<= 4;

//数字字符。
if(c >= '0' && c <= '9')

dec += c - '0';
continue;


//小写abcdef。
if(c >= 'a' && c <= 'f')

dec += c - 'a' + 10;
continue;


//大写ABCDEF。
if(c >= 'A' && c <= 'F')

dec += c - 'A' + 10;
continue;


//没有从任何一个if语句中结束,说明遇到了非法字符。
return -1;


//正常结束循环,返回10进制整数值。
return dec;

十进制转成二进制的函数:
/*递归法求二进制数*/

#include<stdio.h>

void printb(int x,int n);

void main()

int x;
printf("input number:");
scanf("%d",&x);
printf("number of decimal form: %d\n",x);

printb(x,sizeof(int)*8);
putchar('\n');


void printb(int x,int n)

if(n>0)

putchar('0'+( (unsigned)(x & (1<<(n-1) ) )>>(n-1)));
printb(x,n-1);

追问

我现在要得到二进制的字符串啊,不是输出来

追答

#include
void main()

char c[16];
int a[16][4]=0;
int i=0,j;
scanf("%s",c);---->>以字符串形式输入
while(c[i])--------->>>把字符串的每一位还原为数字

if(c[i]>'0'&&c[i]='A'&&c[i]='a'&&c[i]=0;j--)

a[i][j]=c[i]%2;
c[i]/=2;

for(j=0;j<4;j++)
printf("%d",a[i][j]);
i++;

本回答被提问者采纳

以上是关于C语言 字符变量在最高位的符号问题 谁帮我解释下标准ASCII码(0-127)和非标准(128-的主要内容,如果未能解决你的问题,请参考以下文章

谁帮我讲解下Java的数组及下标的范围啊

谁帮我打一个符号就是一个C然后外面一个圈比如@这个

C语言整型提升

C语言:怎么将十六进制字符串转换成二进制字符串,谁帮我写个函数

谁帮我整理一些C语言的基础知识,谢谢!!

谁帮我把这段易语言代码写成C#代码?