关于ASC赋值

来源:百度知道 编辑:UC知道 时间:2024/05/30 04:43:22
比如char a='s'*11%256;cout<<(int)a<<' '<<'s'*11%256;为什么输出结果是-15 241呢?241作为ASC码值赋给a后怎么ASC码值变成-15(减了256)了呢?ASCII范围是0-127啊…

's'*11%256是115*11%256=241
char a=241;
a是有符号字符型的,241的二进制是11110001,最高位是符号位,计算机中,负数是以补码表示的,其原码是反码加1,11110001的反码是10001110,加1后是
10001111,即-15,所以a得ASCII值是-15

(int)a,是字符型转换为整型,若为负数,高位部分补1,即
11111111111111111111111111110001,其补码为:
10000000000000000000000000001111,即-15

char 是有符号、单字节数值。ASCII码只是代表它代表哪个字符,事实上char还是具有数学意义的。

把char 类型 变为 unsinged char 类型就会是你希望的结果了。

因为,char类型,最高位会被解释为符号位,如果为1,则是负数。unsinged char则不会有符号位,最高位也将被解释为数值的一部分。

首先char类型的取值范围是–128 to 127,所以当char a='s'*11%256;时,a=-15的,所以强制类型转化为int型输出是-15
而's'*11%256,由于's'是字符型,与其运算的常数11和256都是整型,所以's'也转化为整型115,所以算出来的结果为241