C语言问题 给一个无符号数赋值一个负数会出现什么结果?负数依旧是按照补码的形式储存的吗?

比如这一句c == (('.'-'0') & 0xff)
c是一个八位非符号数这句 这句的意义是什么?和0xFF按位与有什么意义?

==是等于判断,并不是赋值
负数在计算机中最高位为1,作为符号标志(正数为0),但是如果赋给无符号整型变量,最高位的标志位就会变成数值位,计算时把这个1当成数值

----------物联网校企联盟技术部追问

while(1)
{
c -= '0';
if (c <= 9)
{
ndigit++;
if (ndigit <= MAX_INT_DIGITS)//常数8
{字数限制 删掉了
}
else {
}
else if (c == (('.'-'0') & 0xff) && !(isdecimal)) {isdecimal = true;} //我不理解为何要按位与0xFF
else break;
c = *ptr++;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-10
('.'-'0') 十进制
&0xff 变成十六进制追问

十进制也好16进制也好那个减下来等于-2 内存中的表示不就是1111 1110嘛。。。
按位与0xFF还不是。。。1111 1110 还是我哪里理解有错

追答

C语言问题 给一个无符号数赋值一个负数会出现什么结果?
比如二进制 11111110 是负数吧 前面加个0 按011111110 算了

追问

因为这是一个8位单片机的程序,而且c是一个char也就是8位数,不管16进制还是10进制只是同一个数给人类的表达不同吧,其实计算机中都是用2进制表示的对吧?
所以其实-2最后就变成了0xFE也就是254?但是与不与那个0xFF似乎并没有什么影响

追答

嗯 是的

追问

谢谢了 我自己想明白了 与0xFF只是为了防止单片机处理时使用更多位数的变量而导致的不确定因素

本回答被提问者采纳

C语言问题 给一个无符号数赋值一个负数会出现什么结果?负数依旧是按 ...
负数在计算机中最高位为1,作为符号标志(正数为0),但是如果赋给无符号整型变量,最高位的标志位就会变成数值位,计算时把这个1当成数值 ---物联网校企联盟技术部

C语言中无符号整数变量赋负整数为什么不报错,而且打印这个数也是...
给一个无符号变量赋一个负数,就把这个“负数”的补码当正数对待了(unsigend的级别高于int)——这和给一个浮点变量赋一个整型数时被提升为浮点型一样——这符合C\/C++的自动类型转换规则,所以不报错。至输出还是负数恐怕不对,除非你强制为int型输出,否则输出是无符号的。

...超过127的时候 输出是一个负数 这个负数是怎么算出来的 求解 例如1...
return 0;} c=197, 这句话,c语言编译器理解为你要将一个无符号数197存放到一个字节c中,但c实际上被是char,也就是编译器把c理解为有符号字节。所以A处(把c当成有符号数)把二进制无符号数197当成有符号数对待,结果就是-59(这是补码运算过程)。B处还是把c当成无符号字节,所以还是输出19...

将负数赋给无符号变量将出现什么情况?关于C语言
负数赋给无符号数,实际上是进行了强制转换,-1是以1111 1111的补码存储在CPU里,如果强制转换就变成了65535

c语言中负数是按补码存储,怎么读出来哪
1、计算机中的负数是以其补码形式存在的 补码=原码取反+1 一个字节有8位 可以表示的数值范围在 -128到+127 用二进制表示也就是 10000000 - 01111111(注意:最高位表示符号)最高位是1的都是负数 最高位是0的都是正数 2、如-7 原码是 10000111 然后取反(最高位是符合不用取反)得11111000 ...

关于C语言,无符号整数的一个问题。
后面这句话的意思是说-400作为无符号数输出,结果将是上述你得到的数。为什么是这样呢?因为负数在内存当中是以补码的形式存在的,补码的求法是:1、取绝对值,2、取反,3、加1。(求之前请先将十进制数变成二进制数)不要问为什么是以补码的形式存在,这是计算机的一种机制,懂得就行。既然负数...

C语言中关于负数补码的问题。
您好:您的理解是对的,另外,计算机CPU运算和在内存中的存储都是以补码形式进行的,不论您的软件代码是什么运算和什么变量,通过编译器编译运行后都自动转换为补码进行,这是机器自动完成的不需人为干预。希望能帮到您,满意请采纳。

为什么c语言负数是以补码形式存放的?
为什么 C 语言负数是以补码形式存放的?--- 这个事,和 C 语言没有任何关系。因为,计算机本身,它就是“用补码存储正负数字”。C 语言的程序,在计算机中运行,也就必须“用补码存储正负数”。而且,无论你用任何编程语言编写程序,负数,都是用补码存放的。

如图:C语言程序中无符号数a的值是负数,为什么作整形输出时的结果是6487...
负数在内存中是以补码的形式存储的,即 -666 原码:1000 0010 1001 1010 反码:1111 1101 0110 0101 (符号位不变,其它位取反)补码:1111 1101 0110 0110 (反码+1)即,实际内存中的数据为0b1111 1101 0110 0110=64870 而a为unsigned short int,所以反馈的应该就是64870正数。

在C语言中长度相同的有符号与无符号整型数间,原样赋值时为什么值...
有符号int:-2147683648 到2147683647(- 2^31 到2^31- 1);无符号int:0到4294967295(0 到2^32 - 1);无符号类型int能保存2倍于有符号类型的正整数数据,多1个bit位。正数的补码就是其自身,负数的补码是在其原码的基础上, 保持符号位不变, 其余各位求反(反码),最后+1(即在反码的基础...

相似回答