无法达到c中字符的第一位

无法达到c中字符的第一位,c,bitwise-operators,bit,C,Bitwise Operators,Bit,我试图用下面的代码访问字符的第一位 包括 int main argc,字符**argv{ char*a=argv[1]; printf%d,128&a[0]>>7; putc'\n',标准输出; 返回0; } 但对于任何输入,它的输出都是0。我的位运算符有什么问题 在C语言中,字符的大小是1字节,这意味着它的表示范围是0到255个无符号十进制值 一旦第一位通常是最高有效位,对于128到255之间的值的输入,程序的结果应该是1 为了测试操作128&a[0]>>7是否正确,我构建了另一个在0和255

我试图用下面的代码访问字符的第一位

包括 int main argc,字符**argv{ char*a=argv[1]; printf%d,128&a[0]>>7; putc'\n',标准输出; 返回0; } 但对于任何输入,它的输出都是0。我的位运算符有什么问题

在C语言中,字符的大小是1字节,这意味着它的表示范围是0到255个无符号十进制值

一旦第一位通常是最高有效位,对于128到255之间的值的输入,程序的结果应该是1

为了测试操作128&a[0]>>7是否正确,我构建了另一个在0和255之间迭代的程序,并在标准输出中打印应用于每个值的该操作的结果

这是源代码

/* program.c */
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
    for (unsigned int i = 0; i < 256; i++) {
        printf("Code: %d; First bit: %d\n", i, (128 & i) >> 7);
    }
    return EXIT_SUCCESS;
}
正如所料,结果在0和127之间为0,在128和255之间为1。

在C中,字符的大小为1字节,这意味着其表示范围在无符号十进制值中为0到255

一旦第一位通常是最高有效位,对于128到255之间的值的输入,程序的结果应该是1

为了测试操作128&a[0]>>7是否正确,我构建了另一个在0和255之间迭代的程序,并在标准输出中打印应用于每个值的该操作的结果

这是源代码

/* program.c */
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
    for (unsigned int i = 0; i < 256; i++) {
        printf("Code: %d; First bit: %d\n", i, (128 & i) >> 7);
    }
    return EXIT_SUCCESS;
}


正如所料,结果是0到127之间的0和128到255之间的1。

是否仅使用ASCII字符作为输入?哪一位是第一位?掩码0x80隔离第8位7。请显示特定的输入-如何运行程序。您不是在测试argc。@Calculuswhizyes@Amirreza Riahi所有字符都是正数?:@Vladfrommosco你的意思是我应该使用无符号字符?你只使用ASCII字符作为输入吗?哪一位是第一位?掩码0x80隔离第8位7。请显示特定的输入-如何运行程序。您不是在测试argc。@Calculuswhizyes@Amirreza Riahi所有字符都是正数?:@VladfromMoscow你是说我应该使用无符号字符?127以上没有ASCII码。ASCII码从0到127。如果一个C实现的字符代码高于127,那么它可能除了使用ASCII之外还使用ASCII以外的其他字符。@Miguel Carvalho类型char可以作为类型签名char。这意味着;正值为0-127。很可能您使用的是unicode,其中«是utf-8中的两个字节0xC2 0xAB。在bashshell中,可以使用C-ish引号显式引用./program$'\xff'。扩展ASCII取决于代码页,例如在WINDOWS-1255«is 171中。我怀疑你在linux上使用的是windows-125*。在程序中使用strlenargv[1]进行检查。C中的字符类型表示实现选择的任何编码中的字符编码,C标准中规定了某些要求,例如基本执行字符集的成员必须是非负的。C实现根本不必使用ASCII;它可能使用EBCDIC或其他编码。@KamilCuk我不知道ASCII不是通用的。我一直认为另一种更大、更现代的编码是ASCII的扩展。在做了一些研究之后,我意识到我错了,我根据这里提到的内容编辑了我的原始答案。谢谢。127以上没有ASCII码。ASCII码从0到127。如果一个C实现的字符代码高于127,那么它可能除了使用ASCII之外还使用ASCII以外的其他字符。@Miguel Carvalho类型char可以作为类型签名char。这意味着;正值为0-127。很可能您使用的是unicode,其中«是utf-8中的两个字节0xC2 0xAB。在bashshell中,可以使用C-ish引号显式引用./program$'\xff'。扩展ASCII取决于代码页,例如在WINDOWS-1255«is 171中。我怀疑你在linux上使用的是windows-125*。在程序中使用strlenargv[1]进行检查。C中的字符类型表示实现选择的任何编码中的字符编码,C标准中规定了某些要求,例如基本执行字符集的成员必须是非负的。C实现根本不必使用ASCII;它可能使用EBCDIC或其他编码。@KamilCuk我不知道ASCII不是通用的。我一直认为另一种更大、更现代的编码是ASCII的扩展。在做了一些研究之后,我意识到我错了,我根据这里提到的内容编辑了我的原始答案。非常感谢。