C语言的数据转换问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 06:49:10
有符号的字符变量因为最高位是符号位,所以只剩下七位用作数据,范围是-128-127
其中127我知道是01111111 但-128怎么来的呢?
还有 int a=999;转换成char a 后就是231对不?要是问题来了 -128<char<127 那231不是不对了吗?
假如任意整数是-999怎么办?前面的负号怎么处理?

-128怎么来的呢? 这里有详细说明:
http://zhidao.baidu.com/question/81626009.html

如果char是在0-255范围内,999强制转换成char后确实是231. 如果char是在-128到127之间,则(char)999是 -25.
char到底在上述哪个范围,随编译器而异。可参考
http://zhidao.baidu.com/question/86383577.html

-999若转换为char,其结果是 -999+256*n. n为整数(可为负整数)。
当n取某个整数值使得 -999+256*n落入char的范围内时,该表达式的值即为(char)(-999)的值。

字符型是占用一个字节,即八位。最高位为符号位,所以表示的最大数是0 1111111是127,最小数10000000为补码存储,取反加1得到值为-128

有的编译系统char的类型是无符号的,也就是取值范围是从0-255,会得到大于127的数的。

-999的话,那个符号取决于转化成的char是否是带符号的字符型。