负整数赋值给无符号变量的结果及它们在内存中的表示形式

2024-12-02 23:42:29
推荐回答(1个)
回答1:

整型数据是带符号数还是无符号数,其实在C语言中内部处理是没有区别的,区别仅仅在于输出的时候。

如果给的是带符号数,那么就存储它的补码示,否则存储它的绝对数值对应的二进制值。

比如 一个16位(二进制位数)整型数据在内存中是两个字节,它的每一位都是1。如果该数据定义时未使用unsigned,那么它就是一个带符号的整数,它的值就是-1; 而如果该数据定义时使用了unsigned,那么它就是一个带符号的整数,它的值就是65535。

#include
 int main() {
  short a; 
  unsigned short b;
  a=-1; 
  b=-1;
  printf("a=%d,b=%d\n",a,b); 
  a=65535; 
  b=65535;
  printf("a=%d,b=%d\n",a,b); 
 }

上面的代码的输出如下,说明不管你怎么赋值,

a=-1,b=65535
a=-1,b=65535