这要看你需要什么样的输出。C语言可以自动进行数据类型的转换,所以,你可以使用d格式输出整型数值,或者使用c格式输出字符。
想以十六进制输出就写%x或%X;想以十进制输出就写%u
unsigned char c = -1; printf("%u, %d, %d,\n",a,b,c); 输出:4294967295, 65535, 255, unsigned int a = -1; unsigned short b = -1; unsigned char c = -1; printf("%d, %d, %d,\n",a,b,c); 输出:-1, 65535, 255, a定义为unsigned 输出应该和上面的一样为4294967295啊 因为%d是...
因此不会出现这种带有符号位的情况。即,使⽤%x格式化输出的时候,⼀般char数据会被拓展到int型⼤⼩,⼀般为32位。 可以通过(unsigned char)ifreq.ifr_hwaddr.sa_data[5]来解决问题。使⽤%x输出格式的时候需要将所需要的数据转换为⽆符号类型,因为%x期望对应的参数应该为unsigned int型。
然后movsx指令是按符号扩展,放到ecx中,按符号扩展其实就是将char扩展成int,然后printf中格式说明的‘x’则说明将这个int按16进制输出,也就是fffffff7了,而如果将‘x’变成‘d’,按整数输出,那么程序就会输出-9 013213B7 mov esi,esp //上一句的byte ptr 就反映了我们上面说的 char* b = (char*)&a 截取...
unsigned char 指的是无符号的字符型数据,数据长度是1字节(8位)。无符号8位能存储的最大的整型数据是255,如果超过255会溢出,赋予其256,因为数据溢出,会变为0,同样,赋予其257,会变为1。
这要看你需要什么样的输出。C语言可以自动进行数据类型的转换,所以,你可以使用d格式输出整型数值,或者使用c格式输出字符。
1、printf中采用%d的格式输出 就是讲元素的内存块 以有符号的形式读出来,如char a=-1; 内存中就是 0xff ,这个数字用有符号的读出来 显示的就是 -1(原码,反码,补码的关系有讲) 而printf用%u的格式时 ,若被读的数是unsigned 类型,则不会有 “字符扩张”,若是signed 类型的(char short int long)都会有...
unsigned char max_value = 255;unsigned char sub_result = min_value - 1; //无符号数最小值 - 1 = 最大值unsigned char add_result = max_value + 1; //无符号数最大值 + 1 = 最小值printf( "%d\n", sub_result ); //分析输出 255printf( "%d\n", add_result ); //分析输出 0...