C Unsigned int提供负值?

Dan*_*nul 5 c int unsigned

我有一个无符号整数但是当我使用%d打印出来时,有时会出现负值吗?

Lir*_*una 26

打印%d将读取整数作为带符号的十进制数,而不管其定义的类型.

要打印未签名的号码,请使用%u.

这是因为C处理变量参数的方式.编译器只是从堆栈中提取值(键入void*并指向调用堆栈),并且printf必须从您给它的格式字符串中找出数据包含的内容.

这就是为什么你需要提供格式字符串--C无法使用RTTI或"基类"(Object例如Java)来获取泛型或预定义toString.

  • Nitpick:C是按值调用的,因此编译器会提取参数值,而不是指针.你没有传递指向值的指针(printf("%u",&myvariable);),你直接传递值(printf("%u",myvariable);). (4认同)

int*_*nt3 10

这应该工作:

unsigned int a;
printf("%u\n", a);
Run Code Online (Sandbox Code Playgroud)

说明:在大多数体系结构中,有符号整数用二进制表示.在这个系统中,无论你是使用a 还是a ,小于2**(N-1)(where N = sizeof(int))的正数都以相同的方式表示.但是,如果unsigned int中的数字大于,则表示在二进制补码下的负数有符号数 - 这是在您传递它时给出的.intunsigned int2**(N-1)printf"%d"