我正在尝试移植我最初为Linux制作的一个小程序,现在唯一给我一个错误的是这样写的任何二进制数0b01010101.
我找不到任何关于为什么这在Windows上不起作用或者如何让它在Windows上工作的信息.
这不是c ++的标准吗?
可能重复:
我可以在C或C++中使用二进制文字吗?
我无法在C中显示按位运算符的结果.在下面的代码中,a&b应为100001且a | b为111111.但是,打印结果不同.无论有没有itoa,我都试图这样做,但无济于事.为什么程序没有正确打印答案?
#include<stdio.h>
#include<stdlib.h>
int main (int argc, char* argv[]) {
unsigned a = 101101;
unsigned b = 110011;
unsigned c = a&b;
unsigned d = a|b;
char s[100];
char t[100];
itoa(c,s,2);
itoa(d,t,2);
printf("%s\n",s); /* Shouldn't it produce 100001?
Instead I get 11000100010101001*/
printf("%s\n",t); /* Ought to print 111111.
Instead it prints 11010111111111111 */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
谢谢
如何使用C语言将这一系列位 "000001111110001"(15 位)存储在变量中.
我试图将它存储到unsigned int:
unsigned int key=000001111110001;
Run Code Online (Sandbox Code Playgroud)
但它没有,所以请帮助我.
我有以下UINT8变量:
UINT8 var1 = 0b00000001; //0000 0001
UINT8 var2 = 0b00000011; //0000 0011
UINT8 var3 = 0b00000111; //0000 0111
UINT8 var4 = 0b00001111; //0000 1111
Run Code Online (Sandbox Code Playgroud)
我想将这四个UINT8变量打包成一个UINT32变量,其值如下:
UINT32 var1 = 0b00000001000000110000011100001111; //00000001 00000011 00000111 00001111
Run Code Online (Sandbox Code Playgroud)
以下代码是否会正确安全地执行此操作?
UINT32 var1 = (var1<<24) + (var2<<16) + (var3<<8) + var4;
Run Code Online (Sandbox Code Playgroud) 可能重复:
我可以在C或C++中使用二进制文字吗?
在CI可以写
uint32_t a = 0x40022000;
Run Code Online (Sandbox Code Playgroud)
使用十六进制 我可以输入二进制数字来做类似的事吗?
我试图代表一副扑克牌中的52张牌.我需要总共6位; 2为西装,4为排名.我以为我会使用char并且前两位为零,因为我不需要它们.问题是我不知道是否有办法使用位初始化char.
例如,我想做的是:
char aceOfSpades = 00000000;
char queenOfHearts = 00011101;
我知道一旦我初始化了char,我可以操作这些位,但如果我可以从头开始初始化它会更容易,如我的例子所示.提前致谢!
这个wikepedia页面将c ++定义为"与空白无关的独立语言".虽然与所有语言一样都是正确的,但规则有例外.我现在唯一能想到的就是:
vector<vector<double> >
Run Code Online (Sandbox Code Playgroud)
必须有空格,否则编译器将>>解释为流操作符.还有其他什么.编译一个例外列表会很有趣.
我已经编写了这段代码,但是在编译时我收到了以下语句的消息"invalid expression"
unsigned short address[] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*array is being initialized here.no problem uptil here.*/
unsigned short rowHead=3;
unsigned short colHead=0;
unsigned short rowTail =0;
unsigned short colTail =0;
unsigned short foodx;
unsigned short foody;
unsigned short turn=0;
void gameOver()
{
unsigned short i=0;
address[] ={0b10000001,0b01000010,0b00100100,0b00011000,
0b00011000,0b00100100,0b01000010,0b10000001};
/*this is the line where compiler complaints as invalid expression.*/
while(1)
{
PORTD &=~(1<<i);
PORTB =address[i];
delay_ms(5);
PORTD |=1<<i;
i%8;
}
}
Run Code Online (Sandbox Code Playgroud) 我知道要获得整数的最后一位数,你可以这样做:
printf("%d\n", 1105 % 10); //It will print 5
Run Code Online (Sandbox Code Playgroud)
现在,我能用二进制数做同样的事情吗?
printf("%d\n", 0101 % 10); //This will print 5 as well
Run Code Online (Sandbox Code Playgroud)
我有一个小问题,希望有一个简单的答案。在 C/C++ 中对 Arduino 进行编程时,行“DDRB |= 0b00101000;” 发生。虽然我知道 DDRB 是端口 B 的数据方向寄存器以及“0b00”(即插槽 13 到 9)之后数字的含义,但我仍然不知道“0b00”是什么意思。
在定义中,我只读它意味着高(而 0b11 意味着低)但这意味着什么?
完整代码:
#include <avr/io.h>
#include <util/delay.h>
int main (void) {
float seconds = 0.5;
int time = 1000 * seconds;
DDRB |= 0b00101000;
while (1) {
PORTB |= 0b00001000;
_delay_ms(time);
PORTB &= 0b11110111;
PORTB |= 0b00100000;
_delay_ms(time);
PORTB &= 0b11011111;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 如何在字符串中按位xor?谁能帮我这个...
#include <bits/stdc++.h>
using namespace std;
int main() {
// your code goes here
string a="1001";
string b="1111";
string c=a^b;
cout << "c: " << c << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误:'operator ^'不匹配(操作数类型是'std :: __ cxx11 :: string {aka std :: __ cxx11 :: basic_string}'和'std :: __ cxx11 :: string {aka std :: __ cxx11 :: basic_string }')string c = a ^ b;
我碰巧遇到了一个宏定义,如下面的c ++代码所示(https://github.com/LairdCP/UwTerminalX).
#define SpeedModeInactive 0b00
#define SpeedModeRecv 0b01
#define SpeedModeSend 0b10
#define SpeedModeSendRecv 0b11
Run Code Online (Sandbox Code Playgroud)
当我尝试使用visual studio 2010编译它时,它给我以下错误.
Error 14 error C2059: syntax error : ')'
Run Code Online (Sandbox Code Playgroud)
这个宏是什么意思?宏的用法如下所示.
if ((gchSpeedTestMode == SpeedModeSendRecv || gchSpeedTestMode == SpeedModeRecv) && (gintSpeedBytesReceived10s > 0 || ui->edit_SpeedBytesRec10s->text().toInt() > 0))
{
//Data has been received in the past 10 seconds: start a timer before stopping to catch the extra data packets
gchSpeedTestMode = SpeedModeRecv;
gtmrSpeedTestDelayTimer = new QTimer();
gtmrSpeedTestDelayTimer->setSingleShot(true);
connect(gtmrSpeedTestDelayTimer, SIGNAL(timeout()), this, SLOT(SpeedTestStopTimer()));
gtmrSpeedTestDelayTimer->start(5000);
//Show message …Run Code Online (Sandbox Code Playgroud) 每个人都知道,如果你声明一个8位的值,你可以做类似的事情
int a = B10001110;
Run Code Online (Sandbox Code Playgroud)
就像那个vut我不知道怎么用16位声明它,我做了类似的事情
int b = B1000000100001111;
Run Code Online (Sandbox Code Playgroud)
但这给了我错误.我可以做些什么吗?我想要这个16位格式声明.