I olan aşağıdaki kısıtlamalara c
ile x
byte n
değiştirmektir replaceByte(x,n,c)
olarak adlandırılan fonksiyonu:32 bit bayt yerine sayı
- 0 (LSB) 3 ila sayılı Bayt (MSB)
- Örnekler:
replaceByte(0x12345678,1,0xab) = 0x1234ab78
- Sen 0 < = n < = 3 ve 0 < = c < = 255
- Yasal ops varsayabiliriz :
! ~ &^| + << >>
Azami OPS: 10
int replaceByte(int x, int n, int c) { int shift = (c << (8 * n)); int mask = 0xff << shift; return (mask & x) | shift; }
ama test bu hata olsun:
HATA: Test replaceByte (-2147483648 [0x80000000], 0 [0x0], 0 [0x0]) başarısız oldu ... ... 0 verir [0x0]. Eğer fikriniz yoksa o * ... Sonunda dışarı çözebileceğini yasal bir operatör değil ve anlayarak sonra -2147483648 [0x80000000]
olmalı, bu ne yaptım: Bu yana
int replaceByte(int x, int n, int c) {
int mask = 0xff << (n << 3);
int shift = (c << (n << 3));
return (~mask & x) | shift;
}
hmmm bile, ben aynı hata alıyorum – asdfghjkl
@ shaynie Benim düzenleme görmek –
Nasıl - - "int mask = 0xff << vardiya" açıklayabilir misiniz? "Sizin için çalışır. OP gibi güncellenmiş muhtemelen int mask = 0xff << (n << 3); " –