user-0 提问: 求改整代码，还是我写错了

回复:
user: user-1
content: 引用 3 楼 liups 的回复:#include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 引用 3 楼 liups 的回复:#include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 更正一下，0x0f应该是0xff，因为一个16进制数只有4位！

user: user-1
content: 引用 6 楼 自信男孩 的回复:[quote=引用 5 楼 liups 的回复:] [quote=引用 4 楼 自信男孩 的回复:] [quote=引用 3 楼 liups 的回复:] #include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 不用要求编译器是16位的吧 可以考虑去掉高16位，保留低16位[/quote] 题目本身就暗示这个整数是16位的，而编译器太复杂了，鬼知道多少位，所以题目就有问题（当然有些教材本身就是错的，好象谭的书就直接讲int 16位）[/quote] 定义成unsigned short x;就可以了吧[/quote]  引用 6 楼 自信男孩 的回复:[quote=引用 5 楼 liups 的回复:] [quote=引用 4 楼 自信男孩 的回复:] [quote=引用 3 楼 liups 的回复:] #include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 不用要求编译器是16位的吧 可以考虑去掉高16位，保留低16位[/quote] 题目本身就暗示这个整数是16位的，而编译器太复杂了，鬼知道多少位，所以题目就有问题（当然有些教材本身就是错的，好象谭的书就直接讲int 16位）[/quote] 定义成unsigned short x;就可以了吧[/quote] 虽然目前碰到的short都是16位的，但是标准中可不是这样描述的

user: user-2
content: 引用 5 楼 liups 的回复:[quote=引用 4 楼 自信男孩 的回复:] [quote=引用 3 楼 liups 的回复:] #include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 不用要求编译器是16位的吧 可以考虑去掉高16位，保留低16位[/quote] 题目本身就暗示这个整数是16位的，而编译器太复杂了，鬼知道多少位，所以题目就有问题（当然有些教材本身就是错的，好象谭的书就直接讲int 16位）[/quote] 定义成unsigned short x;就可以了吧

user: user-1
content: 引用 4 楼 自信男孩 的回复:[quote=引用 3 楼 liups 的回复:] #include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 不用要求编译器是16位的吧 可以考虑去掉高16位，保留低16位[/quote] 题目本身就暗示这个整数是16位的，而编译器太复杂了，鬼知道多少位，所以题目就有问题（当然有些教材本身就是错的，好象谭的书就直接讲int 16位）

user: user-2
content: 引用 3 楼 liups 的回复:#include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关 不用要求编译器是16位的吧 可以考虑去掉高16位，保留低16位

user: user-1
content: #include <stdio.h>  int main(void) {     unsigned int x;       scanf("%x", &x);      x = x & 0x0f;      printf("%02x\n", x);     return 0; } 基本上是以上代码。但是题目和我给的代码都有一个问题：如何保证变量x是16位的？这个和编译器有关

user: user-2
content: #include <stdio.h>  int main(void) {     unsigned int x;     //scanf("%d", &x);     scanf("%x", &x);      //printf("%x\n", x);     x = ((~(x >> 8) & 0xff) << 8) + (x & 0xff);      printf("%x\n", x); /*     int count = 0;     int i;     for (i = 0; i < 8; i++)     {         if (x & 1 == 1)         {             count++;         }         x = x >> 1;     }     printf("%d\n", count);     */     return 0; } 供参考，你的程序在计算1出现的次数，而不是按照要求里的写的吧

user: user-1
content: %d不对，%x才是16进制！ 另外，这题显然应该是按位异或