C语言中二个小问题

来源:百度知道 编辑:UC知道 时间:2024/07/05 07:02:42
一:int"a=-1";的无符号整型是多少?("%u\n",a)
是65535还是32767(计算过程)
不知道怎么算来的
二:k=int(a+b); --i;这里变量都正确定义
哪个是合法的C语言赋值语句,对方为什么不是?
请指教!~

一:-1是带符号数,所以首先应求出-1的补码,分三步:求原码、求反码、求补码。
(1)-1的原码是1000000000000001
说明:最高位是符号位,正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示。
(2)-1的反码是1111111111111110
说明:正数的反码与其原码相同,负数的反码为其原码除了符号位以外的各位按位取反。
(3)-1的补码是1111111111111111
说明:正数的补码与其原码相同,负数的补码为其反码在最低位加1。
现在把-1的补码看作无符号数的话,也就是65535(2的16次方减1)。

1.int型在16位系统中最大无符号数为1111 1111 1111 1111,即2^16-1=65535
2.--i因为没有赋值运算符,所以不是赋值语句
---------------
--,++等都是算术运算符,--i这样的语句属算术表达式,
赋值表达式定义为由赋值运算构成的表达式,
赋值语句定义为赋值表达式加上;构成的语句,
以上引自<<C语言程序设计基础>>
其实这样分的这么细除了考试没什么意义

int a=-1无符号整形值在不同位的操作系统下是不一样的。
现在很多家用操作系统都是32位操作系统,此值可是老大了。

个人认为k=int(a+b); 与--i;都是在赋值,

对方是什么意思?我好像看过您问过这个问题。

一,肯定是最大的整数,可能是2的16或32次方减1.看你机子上int多长了,-1相当于0-1,0是全部的0组成的,像是一个电表的表盘的计数器,减1后是99999,这里因为是2进制,所以是全部的1,这样,就成了最大的数。
二,除了定义的语句,像int a = b + c这种类型的定义语句,有等号的句子几乎都是赋值语句,你知道k = int(a+b)即为k = sumint,第二个--i可以理解为i=i-1,所以,都可以说是正确的赋值语句。而两个都是正确的定义。
其实这倒并不重要,如果你要进入c++的话,好好看看定义和声明的不同。

in