c语言赋值
发布网友
发布时间:2022-05-01 02:26
我来回答
共6个回答
热心网友
时间:2022-06-22 12:27
(负数在计算机中用补码表示)
执行int b=-1;时,此时b的赋值过程如下(二进制表示):
0000 0000 0000 0001(正数的1)
1111 1111 1111 1110(正数1取反)
1111 1111 1111 1111 (正数1取反加1,得到-1)此时最高位的1表示符号。
但执行到a=b时,
a=1111 1111 1111 1111,由于此时a 是无符号数。
所以它的值是2的16次方减1,即65535,即二进制数1111 1111 1111 1111
热心网友
时间:2022-06-22 12:28
因为unsigned 是无符号型 存储的数据范围则是0~65535 没有-1 所以 结果益处啦 改成int a 就好了
热心网友
时间:2022-06-22 12:28
也就是a=-1 因为负数在存储中以补码形式存在 规定a是无符号整形也就是回吧符号位的1当做2的16次而不是负号 因此得到的结果就是65535
热心网友
时间:2022-06-22 12:29
unsignesd 是没有符号的他的范围是0-65525
int 是有符号的 他的范围-32768-32767
他们都是都是占4个字节 一个字节八位
00000000 000000000 00000000 00000000 二进制32位
因为int的第一位是符号位() 所以他表示的数分正负但是范围要比unsigned小
但是他们都是32位啊 —1的第一位一定是符号位 转换成unsigned时他表示的就是不是符号位了 他表示数值了
还是不怎么好说明白···
热心网友
时间:2022-06-22 12:30
%n格式不会有输出,而是会将到目前为止输出的字符数量保存到对应的地址中(对应一个int *类型的值)。
-1的二进制形式(按16位计算)是
1111 1111 1111 1111
而unsigned类型的65535的二进制形式也是这样的,所以会按unsigned类型解释这个值。
热心网友
时间:2022-06-22 12:30
-1在内存中是十六进制的0xffffffff
当成无符号数就是2^32-1=65535
至于为什么-1在内存中是十六进制的0xffffffff
‘-’号就是“取反加一”
1是0x00000001
去反就成了0xfffffffe
加一就成了0xffffffff